changeset 28344:ac371d4c007f

templater: drop redundant type conversion when evaluating integer argument A function argument may be an integer. In this case, it isn't necessary to convert a value to string and back to integer. Because an argument may be an arbitrary object (e.g. date tuple), TypeError should be caught as well.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 14 Feb 2016 12:48:14 +0900
parents a6c2310b3827
children d81437c91a26
files mercurial/templater.py tests/test-command-template.t
diffstat 2 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/templater.py	Sun Feb 14 12:42:25 2016 +0900
+++ b/mercurial/templater.py	Sun Feb 14 12:48:14 2016 +0900
@@ -221,9 +221,10 @@
     return thing
 
 def evalinteger(context, mapping, arg, err):
+    v = evalfuncarg(context, mapping, arg)
     try:
-        return int(stringify(arg[0](context, mapping, arg[1])))
-    except ValueError:
+        return int(v)
+    except (TypeError, ValueError):
         raise error.ParseError(err)
 
 def runinteger(context, mapping, data):
--- a/tests/test-command-template.t	Sun Feb 14 12:42:25 2016 +0900
+++ b/tests/test-command-template.t	Sun Feb 14 12:48:14 2016 +0900
@@ -3148,6 +3148,9 @@
   text.1:be wrapped
   text.1:desc to be
   text.1:wrapped (no-eol)
+  $ hg log -l1 -T '{fill(desc, date, "", "")}\n'
+  hg: parse error: fill expects an integer width
+  [255]
 
   $ hg log -l 1 --template '{sub(r"[0-9]", "-", author)}'
   {node|short} (no-eol)