diff hgext/keyword.py @ 23622:cb9d845406e5

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.
author Christian Ebert <blacktrash@gmx.net>
date Sun, 21 Dec 2014 13:02:59 +0000
parents c4ce50a3d634
children 5803bfeebbfe
line wrap: on
line diff
--- 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)