Mercurial > public > mercurial-scm > hg
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