diff --git a/Annex/AutoMerge.hs b/Annex/AutoMerge.hs index 825dde443e..bfbe71dc28 100644 --- a/Annex/AutoMerge.hs +++ b/Annex/AutoMerge.hs @@ -77,6 +77,10 @@ autoMergeFrom branch currbranch commitmode = do - In direct mode, the work tree is not touched here; files are staged to - the index, and written to the gitAnnexMergeDir, for later handling by - the direct mode merge code. + - + - Returns false when there are no merge conflicts to resolve. + - A git merge can fail for other reasons, and this allows detecting + - such failures. -} resolveMerge :: Maybe Git.Ref -> Git.Ref -> Annex Bool resolveMerge us them = do diff --git a/Annex/Direct.hs b/Annex/Direct.hs index 35a5b50133..eb8d4842d5 100644 --- a/Annex/Direct.hs +++ b/Annex/Direct.hs @@ -173,16 +173,18 @@ mergeDirect startbranch oldref branch resolvemerge commitmode = exclusively $ do withIndexFile tmpi $ do merged <- stageMerge d branch commitmode - r <- if merged + ok <- if merged then return True else resolvemerge - mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref) - mergeDirectCommit merged startbranch branch commitmode + if ok + then do + mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref) + mergeDirectCommit merged startbranch branch commitmode + liftIO $ whenM (doesFileExist tmpi) $ + rename tmpi reali + else liftIO $ nukeFile tmpi - liftIO $ whenM (doesFileExist tmpi) $ - rename tmpi reali - - return r + return ok where exclusively = withExclusiveLock gitAnnexMergeLock diff --git a/debian/changelog b/debian/changelog index 709ae893ca..5be414bd1d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -36,6 +36,12 @@ git-annex (5.20150931) UNRELEASED; urgency=medium * Avoid unncessary write to the location log when a file is unlocked and then added back with unchanged content. * S3: Fix support for using https. + * sync, merge, assistant: When git merge failed for a reason other + than a conflicted merge, such as a crippled filesystem not allowing + particular characters in filenames, git-annex would make a merge commit + that could omit such files or otherwise be bad. Fixed by aborting the + whole merge process when git merge fails for any reason other than a + merge conflict. * Debian: Add torrent library to build-depends as it's packaged now, and stop recommending bittornado | bittorrent. * Debian: Remove dependency on transformers library, as it is now