sync: Automatically resolve merge conflict between and annexed file and a regular git file.

This is a new feature, it was not handled before, since it's a bit of an
edge case. However, it can be handled exactly the same as a file/dir
conflict, just leave the non-annexed item alone.

While implementing this, the core resolveMerge' function got a lot simpler
and clearer. Note especially that where before there was an asymetric call to
stagefromdirectmergedir, now graftin is called symmetrically in both cases.

And, in order to add that `graftin us`, the current branch needed to be
known (if there is no current branch, there cannot be a merge conflict).
This led to some cleanups of how autoMergeFrom behaved when there is no
current branch.

This commit was sponsored by Philippe Gauthier.
This commit is contained in:
Joey Hess 2014-03-04 17:45:11 -04:00
parent 1fcc5bef66
commit 14d1e878ab
5 changed files with 81 additions and 77 deletions

View file

@ -83,7 +83,7 @@ onChange file
[ "merging", Git.fromRef changedbranch
, "into", Git.fromRef current
]
void $ liftAnnex $ autoMergeFrom changedbranch
void $ liftAnnex $ autoMergeFrom changedbranch (Just current)
mergecurrent _ = noop
handleDesynced = case fromTaggedBranch changedbranch of