templater: evaluate each item of revset() as integer revision
Because templater.revset() returns a list of strings, repo["-1"] was mapped to
the tipmost revision. Ideally, we should make revset() return a list of integer
revisions, but it turned out not simple. If revset() is a list of integers,
"{ifcontains(rev, revset(), ...)}" would fail because "ifcontains" casts "rev"
to a string.
So this patch just converts a string back to an integer revision.
--- a/mercurial/templatekw.py Sat Feb 06 19:16:12 2016 +0900
+++ b/mercurial/templatekw.py Fri Feb 12 18:08:53 2016 +0900
@@ -492,7 +492,7 @@
repo = args['ctx'].repo()
f = _showlist(name, revs, **args)
return _hybrid(f, revs,
- lambda x: {name: x, 'ctx': repo[x], 'revcache': {}})
+ lambda x: {name: x, 'ctx': repo[int(x)], 'revcache': {}})
def showsubrepos(**args):
""":subrepos: List of strings. Updated subrepositories in the changeset."""
--- a/tests/test-command-template.t Sat Feb 06 19:16:12 2016 +0900
+++ b/tests/test-command-template.t Fri Feb 12 18:08:53 2016 +0900
@@ -3310,6 +3310,13 @@
0 a
p
+a revset item must be evaluated as an integer revision, not an offset from tip
+
+ $ hg log -l 1 -T '{revset("null") % "{rev}:{node|short}"}\n'
+ -1:000000000000
+ $ hg log -l 1 -T '{revset("%s", "null") % "{rev}:{node|short}"}\n'
+ -1:000000000000
+
Test active bookmark templating
$ hg book foo