[PATCH 07 of 16] merge: use the right ancestor when both sides copied the same file

Mads Kiilerich mads at kiilerich.com
Sun Mar 2 13:15:40 CST 2014


# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1393356586 -3600
#      Tue Feb 25 20:29:46 2014 +0100
# Node ID 3ab2e810c8c530c687ca47144a1802511839654d
# Parent  4c04e3217f699cb6445e19109f2edc7df451df37
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


More information about the Mercurial-devel mailing list