don't disable smudge filter while merging

The smudge filter does need to be run, because if the key is in the local
annex already (due to renaming, or a copy of a file added, or a new file
added and its content has already arrived), git merge smudges the file and
this should provide its content.

This does probably mean that in merge conflict resolution, git smudges the
existing file, re-copying all its content to it, and then the file is
deleted. So, not efficient.
This commit is contained in:
Joey Hess 2015-12-29 16:36:21 -04:00
parent 24bbaa2346
commit 996ae9b172
Failed to extract signature
2 changed files with 2 additions and 17 deletions

View file

@ -30,7 +30,6 @@ import Annex.VariantFile
import qualified Database.Keys
import Annex.InodeSentinal
import Utility.InodeCache
import Command.Smudge (withSmudgeDisabled)
import qualified Data.Set as S
import qualified Data.Map as M
@ -50,8 +49,7 @@ autoMergeFrom branch currbranch commitmode = do
where
go old = ifM isDirect
( mergeDirect currbranch old branch (resolveMerge old branch) commitmode
-- Avoid smudge filter populating files while merging.
, withSmudgeDisabled (Git.Merge.mergeNonInteractive branch commitmode)
, inRepo (Git.Merge.mergeNonInteractive branch commitmode)
<||> (resolveMerge old branch <&&> commitResolvedMerge commitmode)
)

View file

@ -19,9 +19,6 @@ import Utility.InodeCache
import Types.KeySource
import Backend
import Logs.Location
import Annex.Index (addGitEnv)
import Utility.Env
import qualified Git
import qualified Database.Keys
import qualified Data.ByteString.Lazy as B
@ -59,7 +56,7 @@ smudge file = do
-- don't provide such modified content as it
-- will be confusing. inAnnex will detect such
-- modifications.
ifM ((not <$> smudgeDisabled) <&&> inAnnex k)
ifM (inAnnex k)
( do
content <- calcRepo (gitAnnexLocation k)
liftIO $ B.putStr . fromMaybe b
@ -69,16 +66,6 @@ smudge file = do
Database.Keys.addAssociatedFile k file
stop
-- Environment variable to disable smudging providing the content of keys.
smudgeDisabled :: Annex Bool
smudgeDisabled = liftIO $ isJust <$> getEnv smudgeDisableEnv
smudgeDisableEnv :: String
smudgeDisableEnv = "ANNEX_SMUDGE_DISABLE"
withSmudgeDisabled :: (Git.Repo -> IO a) -> Annex a
withSmudgeDisabled a = inRepo $ \r -> addGitEnv r smudgeDisableEnv "1" >>= a
-- Clean filter is fed file content on stdin, decides if a file
-- should be stored in the annex, and outputs a pointer to its
-- injested content.