# HG changeset patch # User Christian Ebert # Date 2014-12-21 13:02:59 # Node ID cb9d845406e5b97e6fed70bab654e71f7083f82c # Parent bb679344c88d91748f14120f4fdc30f20e0e8076 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. diff --git a/hgext/keyword.py b/hgext/keyword.py --- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -264,8 +264,17 @@ class kwtemplater(object): 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) diff --git a/tests/test-keyword.t b/tests/test-keyword.t --- a/tests/test-keyword.t +++ b/tests/test-keyword.t @@ -1062,13 +1062,13 @@ conflict: keyword should stay outside co 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