test suite passes in direct mode

This fixes a bug with git annex add in direct mode. If some files already
existed in the tree pointing at the same key as a file that was just added,
and their content was not present, add neglected to copy the content to
those files.

I also changed the behavior of moveAnnex slightly: When content is moved
into the annex in direct mode, it does not overwrite any content already
present in direct mode files. That content may be modified after all.
This commit is contained in:
Joey Hess 2013-05-17 15:59:37 -04:00
parent 90d44f09eb
commit b8e5b9c645
6 changed files with 63 additions and 31 deletions

View file

@ -30,6 +30,7 @@ import Utility.FileMode
import Config
import Utility.InodeCache
import Annex.FileMatcher
import Annex.ReplaceFile
def :: [Command]
def = [notBareRepo $ command "add" paramPaths seek SectionCommon
@ -155,6 +156,11 @@ finishIngestDirect key source = do
when (contentLocation source /= keyFilename source) $
liftIO $ nukeFile $ contentLocation source
{- Copy to any other locations using the same key. -}
otherfs <- filter (/= keyFilename source) <$> associatedFiles key
forM_ otherfs $
addContentWhenNotPresent key (keyFilename source)
perform :: FilePath -> CommandPerform
perform file =
maybe stop (\key -> next $ cleanup file key True)