summaryrefslogtreecommitdiff
path: root/Annex/Direct.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-06-09 20:10:12 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-06-09 20:10:12 -0400
commit2ca723a7c1c1130465b21d7db23c137976f58f6f (patch)
tree15c4e176efd734f26610b03e65eb37313050ca0c /Annex/Direct.hs
parent35b79079e4cdd8534ae8d8868b46b3ad00a8ba64 (diff)
avoid fast-forwarding when a merge conflict was auto-resolved
Diffstat (limited to 'Annex/Direct.hs')
-rw-r--r--Annex/Direct.hs23
1 files changed, 14 insertions, 9 deletions
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
index 029bc16d7..70188ea11 100644
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -167,9 +167,12 @@ mergeDirect startbranch oldref branch resolvemerge = do
createDirectoryIfMissing True d
withIndexFile tmpi $ do
- r <- inRepo (mergein d) <||> resolvemerge
+ merged <- inRepo (mergein d)
+ r <- if merged
+ then return True
+ else resolvemerge
mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref)
- mergeDirectCommit startbranch branch
+ mergeDirectCommit merged startbranch branch
liftIO $ rename tmpi reali
return r
where
@@ -179,14 +182,14 @@ mergeDirect startbranch oldref branch resolvemerge = do
{- Commits after a direct mode merge is complete, and after the work
- tree has been updated by mergeDirectCleanup.
-}
-mergeDirectCommit :: Maybe Git.Ref -> Git.Branch -> Annex ()
-mergeDirectCommit old branch = do
+mergeDirectCommit :: Bool -> Maybe Git.Ref -> Git.Branch -> Annex ()
+mergeDirectCommit allowff old branch = do
void preCommitDirect
- gitdir <- fromRepo Git.localGitDir
- let merge_head = gitdir </> "MERGE_HEAD"
- let merge_msg = gitdir </> "MERGE_MSG"
- let merge_mode = gitdir </> "MERGE_MODE"
- ifM (maybe (return False) (\o -> inRepo $ Git.Branch.fastForwardable o branch) old)
+ d <- fromRepo Git.localGitDir
+ let merge_head = d </> "MERGE_HEAD"
+ let merge_msg = d </> "MERGE_MSG"
+ let merge_mode = d </> "MERGE_MODE"
+ ifM (pure allowff <&&> canff)
( inRepo $ Git.Branch.update Git.Ref.headRef branch -- fast forward
, do
msg <- liftIO $
@@ -196,6 +199,8 @@ mergeDirectCommit old branch = do
Git.Ref.headRef [Git.Ref.headRef, branch]
)
liftIO $ mapM_ nukeFile [merge_head, merge_msg, merge_mode]
+ where
+ canff = maybe (return False) (\o -> inRepo $ Git.Branch.fastForwardable o branch) old
{- Cleans up after a direct mode merge. The merge must have been staged
- in the index. Uses diff-index to compare the staged changes with