Patchwork negrev: return empty for wdir() and nullrev

login
register
mail settings
Submitter Jordi Gutiérrez Hermoso
Date Feb. 19, 2019, 4:48 a.m.
Message ID <379d5bef7d3601d43c5d.1550551680@chloe>
Download mbox | patch
Permalink /patch/38818/
State Accepted
Headers show

Comments

Jordi Gutiérrez Hermoso - Feb. 19, 2019, 4:48 a.m.
# HG changeset patch
# User Jordi Gutiérrez Hermoso <jordigh@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.
Yuya Nishihara - Feb. 19, 2019, 12:55 p.m.
On Mon, 18 Feb 2019 23:48:00 -0500, Jordi Gutiérrez Hermoso wrote:
> # HG changeset patch
> # User Jordi Gutiérrez Hermoso <jordigh@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

Queued, thanks.

Patch

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'