avoid fast-forwarding when a merge conflict was auto-resolved
This commit is contained in:
parent
2dfbbc6b43
commit
ab72456bb3
2 changed files with 15 additions and 10 deletions
|
@ -67,7 +67,7 @@ autoMergeFrom branch currbranch = do
|
||||||
- tree. The resolution is committed.
|
- tree. The resolution is committed.
|
||||||
-
|
-
|
||||||
- In direct mode, the work tree is not touched here, and no commit is made;
|
- In direct mode, the work tree is not touched here, and no commit is made;
|
||||||
- files are staged to the index, and written to the gitAnnexMergeDir, and
|
- files are staged to the index, and written to the gitAnnexMergeDir, and
|
||||||
- later mergeDirectCleanup handles updating the work tree.
|
- later mergeDirectCleanup handles updating the work tree.
|
||||||
-}
|
-}
|
||||||
resolveMerge :: Maybe Git.Ref -> Git.Ref -> Annex Bool
|
resolveMerge :: Maybe Git.Ref -> Git.Ref -> Annex Bool
|
||||||
|
|
|
@ -167,9 +167,12 @@ mergeDirect startbranch oldref branch resolvemerge = do
|
||||||
createDirectoryIfMissing True d
|
createDirectoryIfMissing True d
|
||||||
|
|
||||||
withIndexFile tmpi $ do
|
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)
|
mergeDirectCleanup d (fromMaybe Git.Sha.emptyTree oldref)
|
||||||
mergeDirectCommit startbranch branch
|
mergeDirectCommit merged startbranch branch
|
||||||
liftIO $ rename tmpi reali
|
liftIO $ rename tmpi reali
|
||||||
return r
|
return r
|
||||||
where
|
where
|
||||||
|
@ -179,14 +182,14 @@ mergeDirect startbranch oldref branch resolvemerge = do
|
||||||
{- Commits after a direct mode merge is complete, and after the work
|
{- Commits after a direct mode merge is complete, and after the work
|
||||||
- tree has been updated by mergeDirectCleanup.
|
- tree has been updated by mergeDirectCleanup.
|
||||||
-}
|
-}
|
||||||
mergeDirectCommit :: Maybe Git.Ref -> Git.Branch -> Annex ()
|
mergeDirectCommit :: Bool -> Maybe Git.Ref -> Git.Branch -> Annex ()
|
||||||
mergeDirectCommit old branch = do
|
mergeDirectCommit allowff old branch = do
|
||||||
void preCommitDirect
|
void preCommitDirect
|
||||||
gitdir <- fromRepo Git.localGitDir
|
d <- fromRepo Git.localGitDir
|
||||||
let merge_head = gitdir </> "MERGE_HEAD"
|
let merge_head = d </> "MERGE_HEAD"
|
||||||
let merge_msg = gitdir </> "MERGE_MSG"
|
let merge_msg = d </> "MERGE_MSG"
|
||||||
let merge_mode = gitdir </> "MERGE_MODE"
|
let merge_mode = d </> "MERGE_MODE"
|
||||||
ifM (maybe (return False) (\o -> inRepo $ Git.Branch.fastForwardable o branch) old)
|
ifM (pure allowff <&&> canff)
|
||||||
( inRepo $ Git.Branch.update Git.Ref.headRef branch -- fast forward
|
( inRepo $ Git.Branch.update Git.Ref.headRef branch -- fast forward
|
||||||
, do
|
, do
|
||||||
msg <- liftIO $
|
msg <- liftIO $
|
||||||
|
@ -196,6 +199,8 @@ mergeDirectCommit old branch = do
|
||||||
Git.Ref.headRef [Git.Ref.headRef, branch]
|
Git.Ref.headRef [Git.Ref.headRef, branch]
|
||||||
)
|
)
|
||||||
liftIO $ mapM_ nukeFile [merge_head, merge_msg, merge_mode]
|
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
|
{- 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
|
- in the index. Uses diff-index to compare the staged changes with
|
||||||
|
|
Loading…
Add table
Reference in a new issue