templatekw: fix crash on multiple latesttags resolution at wdir (issue6055)
It appears not easy to fix only() to support wdir(), so this patch works
around the issue by getlatesttags(). The "+1" after len(changes) doesn't
matter since ctx never changes while sorting. It's just for clarity.
--- a/mercurial/templatekw.py Sun Jan 20 11:39:16 2019 +0900
+++ b/mercurial/templatekw.py Sun Jan 20 11:51:21 2019 +0900
@@ -81,8 +81,15 @@
pdate, pdist, ptag = max(ptags)
else:
def key(x):
- changessincetag = len(repo.revs('only(%d, %s)',
- ctx.rev(), x[2][0]))
+ tag = x[2][0]
+ if ctx.rev() is None:
+ # only() doesn't support wdir
+ prevs = [c.rev() for c in ctx.parents()]
+ changes = repo.revs('only(%ld, %s)', prevs, tag)
+ changessincetag = len(changes) + 1
+ else:
+ changes = repo.revs('only(%d, %s)', ctx.rev(), tag)
+ changessincetag = len(changes)
# Smallest number of changes since tag wins. Date is
# used as tiebreaker.
return [-changessincetag, x[0]]
--- a/tests/test-template-keywords.t Sun Jan 20 11:39:16 2019 +0900
+++ b/tests/test-template-keywords.t Sun Jan 20 11:51:21 2019 +0900
@@ -1063,8 +1063,18 @@
$ hg ci -qAm h3a
$ hg merge -q 2
$ hg log -Gr'::wdir()' -T "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n"
- hg: parse error: invalid argument for revspec
- [255]
+ o 2147483647: at3+2,3 t3+2,3
+ |\
+ | @ 12: at3+1,1 t3+1,1
+ | |
+ | o 3: at3+0,0 t3+0,0
+ | |
+ @ | 2: t2+0,0
+ |/
+ o 1: t1+0,0
+ |
+ o 0: null+1,1
+
$ hg ci -m merge
$ hg log -Gr'::.' -T "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n"