keyword: handle resolve to either parent
authorChristian Ebert <blacktrash@gmx.net>
Sun, 21 Dec 2014 13:02:59 +0000
changeset 23622 cb9d845406e5
parent 23621 bb679344c88d
child 23623 80a37f706011
keyword: handle resolve to either parent Merged files are considered modified at commit time even if only 1 parent differs. In this case we must use the change context of this parent for expansion. The issue went unnoticed for long because it is only apparent until the next update to the merge revision - except in test-keyword where it was always staring us in the face.
hgext/keyword.py
tests/test-keyword.t
--- a/hgext/keyword.py	Sun Dec 21 12:53:57 2014 +0000
+++ b/hgext/keyword.py	Sun Dec 21 13:02:59 2014 +0000
@@ -264,8 +264,17 @@
             if util.binary(data):
                 continue
             if expand:
+                parents = ctx.parents()
                 if lookup:
                     ctx = self.linkctx(f, mf[f])
+                elif self.restrict and len(parents) > 1:
+                    # merge commit
+                    # in case of conflict f is in modified state during
+                    # merge, even if f does not differ from f in parent
+                    for p in parents:
+                        if f in p and not p[f].cmp(ctx[f]):
+                            ctx = p[f].changectx()
+                            break
                 data, found = self.substitute(data, f, ctx, re_kw.subn)
             elif self.restrict:
                 found = re_kw.search(data)
--- a/tests/test-keyword.t	Sun Dec 21 12:53:57 2014 +0000
+++ b/tests/test-keyword.t	Sun Dec 21 13:02:59 2014 +0000
@@ -1062,13 +1062,13 @@
   foo
   >>>>>>> other: 85d2d2d732a5  - test: simplemerge
 
-resolve to local
+resolve to local, m must contain hash of last change (local parent)
 
   $ hg resolve -t internal:local -a
   (no more unresolved files)
   $ hg commit -m localresolve
   $ cat m
-  $Id: m 800511b3a22d Thu, 01 Jan 1970 00:00:00 +0000 test $
+  $Id: m 88a80c8d172e Thu, 01 Jan 1970 00:00:00 +0000 test $
   bar
 
 Test restricted mode with transplant -b