# HG changeset patch # User Mads Kiilerich # Date 2014-02-25 19:29:46 # Node ID 0dc7a50345c2c64539837a4645f1aa3c162fb4e9 # Parent 3db9e798e004525ff544cffe20c5faa7c7136d46 merge: use the right ancestor when both sides copied the same file The tests shows no real changes because of this ... but there must be some weird corner cases where using the right ancestor for the merge planning is better than using the wrong one. diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -388,9 +388,14 @@ def manifestmerge(repo, wctx, p2, pa, br if partial and not partial(f): continue if n1 and n2: - fla = ma.flags(f) + fa = f + a = ma.get(f, nullid) + if a == nullid: + fa = copy.get(f, f) + # Note: f as default is wrong - we can't really make a 3-way + # merge without an ancestor file. + fla = ma.flags(fa) nol = 'l' not in fl1 + fl2 + fla - a = ma.get(f, nullid) if n2 == a and fl2 == fla: pass # remote unchanged - keep local elif n1 == a and fl1 == fla: # local unchanged - use remote