[PATCH] negrev: return empty for wdir() and nullrev

Jordi Gutiérrez Hermoso jordigh at octave.org
Tue Feb 19 04:48:00 UTC 2019


# HG changeset patch
# User Jordi Gutiérrez Hermoso <jordigh at octave.org>
# Date 1550551420 18000
#      Mon Feb 18 23:43:40 2019 -0500
# Node ID 379d5bef7d3601d43c5d7d4c4c39d7014bc71208
# Parent  37b33c34bf4f890857b5e8728febbc82a99368a5
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.

diff --git a/mercurial/templatekw.py b/mercurial/templatekw.py
--- a/mercurial/templatekw.py
+++ b/mercurial/templatekw.py
@@ -559,8 +559,11 @@ def shownegrev(context, mapping):
     """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):
diff --git a/tests/test-template-keywords.t b/tests/test-template-keywords.t
--- a/tests/test-template-keywords.t
+++ b/tests/test-template-keywords.t
@@ -76,6 +76,12 @@ experimental:
   $ 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'


More information about the Mercurial-devel mailing list