diff tests/test-command-template.t @ 27939:7ed3a3c0cef1 stable

templater: abort if infinite recursion detected while evaluation (issue4758) It would be nice if we could detect recursion at the parsing phase, but we can't because a template can refer to a keyword of the same name. For example, "rev = {rev}" is valid if rev is a keyword, and we don't know if rev is a keyword or a template while parsing.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 22 Jul 2015 23:29:41 +0900
parents a94f7eef3199
children cfe7da66f555
line wrap: on
line diff
--- a/tests/test-command-template.t	Fri Jan 22 16:31:50 2016 -0800
+++ b/tests/test-command-template.t	Wed Jul 22 23:29:41 2015 +0900
@@ -1035,6 +1035,33 @@
   1
   0
 
+Check that recursive reference does not fall into RuntimeError (issue4758):
+
+ common mistake:
+
+  $ hg log -T '{changeset}\n'
+  abort: recursive reference 'changeset' in template
+  [255]
+
+ circular reference:
+
+  $ cat << EOF > issue4758
+  > changeset = '{foo}'
+  > foo = '{changeset}'
+  > EOF
+  $ hg log --style ./issue4758
+  abort: recursive reference 'foo' in template
+  [255]
+
+ not a recursion if a keyword of the same name exists:
+
+  $ cat << EOF > issue4758
+  > changeset = '{tags % rev}'
+  > rev = '{rev} {tag}\n'
+  > EOF
+  $ hg log --style ./issue4758 -r tip
+  8 tip
+
 Check that {phase} works correctly on parents:
 
   $ cat << EOF > parentphase