templatekw: make negrev return empty for wdir() and nullrev
I considered just returning the same output that {rev} returns here,
but {rev} also returns essentially gibberish: either an INT_MAX-kind
of variable for wdir() or -1 for null. Since these are numbers that
are intended to be used for calculations, and since the numbers for
wdir() and -1 are not really very helpful for calculation (and worse,
when used as a revision number -1 is equal to unhidden tip), I figured
the most reasonable thing to do here is to just return nothing for
negrev.
This could potentially break scripts that are expecting to parse a
nonempty integer out of a {negrev}, but that seems like a very remote
concern at this juncture.
--- a/mercurial/templatekw.py Mon Feb 18 18:44:21 2019 -0500
+++ b/mercurial/templatekw.py Mon Feb 18 23:43:40 2019 -0500
@@ -559,8 +559,11 @@
"""Integer. The repository-local changeset negative revision number,
which counts in the opposite direction."""
ctx = context.resource(mapping, 'ctx')
+ rev = ctx.rev()
+ if rev is None or rev < 0: # wdir() or nullrev?
+ return None
repo = context.resource(mapping, 'repo')
- return scmutil.intrev(ctx) - len(repo)
+ return rev - len(repo)
@templatekeyword('node', requires={'ctx'})
def shownode(context, mapping):
--- a/tests/test-template-keywords.t Mon Feb 18 18:44:21 2019 -0500
+++ b/tests/test-template-keywords.t Mon Feb 18 23:43:40 2019 -0500
@@ -76,6 +76,12 @@
$ hg log -r 'wdir()' -T '{manifest}\n'
2147483647:ffffffffffff
+However, for negrev, we refuse to output anything (as well as for null)
+
+ $ hg log -r 'wdir() + null' -T 'bla{negrev}nk\n'
+ blank
+ blank
+
Changectx-derived keywords are disabled within {manifest} as {node} changes:
$ hg log -r0 -T 'outer:{p1node} {manifest % "inner:{p1node}"}\n'