Deal with change in git 2.0 that made indirect mode merge conflict resolution leave behind old files.

I think this is a git behavior change, but have not checked to be sure.
Conflict cruft used to look like $foo~HEAD, but now just $foo is left
behind as conflict cruft.

With test case.
This commit is contained in:
Joey Hess 2014-07-11 16:56:19 -04:00
parent cb66ca3a76
commit 61a35de433
3 changed files with 5 additions and 2 deletions

View file

@ -177,7 +177,7 @@ resolveMerge' (Just us) them u = do
return (Just file)
{- git-merge moves conflicting files away to files
- named something like f~HEAD or f~branch, but the
- named something like f~HEAD or f~branch or just f, but the
- exact name chosen can vary. Once the conflict is resolved,
- this cruft can be deleted. To avoid deleting legitimate
- files that look like this, only delete files that are
@ -194,7 +194,7 @@ cleanConflictCruft resolvedfs top = do
liftIO $ nukeFile f
| otherwise = noop
s = S.fromList resolvedfs
matchesresolved f = S.member (base f) s
matchesresolved f = S.member f s || S.member (base f) s
base f = reverse $ drop 1 $ dropWhile (/= '~') $ reverse f
commitResolvedMerge :: Git.Branch.CommitMode -> Annex Bool

View file

@ -857,6 +857,7 @@ test_conflict_resolution testenv =
let v = filter (variantprefix `isPrefixOf`) l
length v == 2
@? (what ++ " not exactly 2 variant files in: " ++ show l)
conflictor `notElem` l @? ("conflictor still present after conflict resolution")
indir testenv d $ do
git_annex testenv "get" v @? "get failed"
git_annex_expectoutput testenv "find" v v

2
debian/changelog vendored
View file

@ -11,6 +11,8 @@ git-annex (5.20140710) UNRELEASED; urgency=medium
it.
* resolvemerge: New plumbing command that runs the automatic merge conflict
resolver.
* Deal with change in git 2.0 that made indirect mode merge conflict
resolution leave behind old files.
-- Joey Hess <joeyh@debian.org> Wed, 09 Jul 2014 23:29:21 -0400