Mercurial > hg
changeset 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 | bb679344c88d |
children | 80a37f706011 |
files | hgext/keyword.py tests/test-keyword.t |
diffstat | 2 files changed, 11 insertions(+), 2 deletions(-) [+] |
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)
--- 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