From cb5ca6e981a9dedce90d9ac7e1785c5ae5841723 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 15 Oct 2015 14:22:46 -0400 Subject: avoid making post-merge-conflict-resolution commit when no conflicts were resolved 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. --- Annex/Direct.hs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'Annex/Direct.hs') diff --git a/Annex/Direct.hs b/Annex/Direct.hs index 35a5b5013..eb8d4842d 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 -- cgit v1.2.3