templater: raise error for unknown func
Previously, if a template '{foo()}' was given, the buildfunc would not be able
to match it and hit a code path that would not return so it would error out
later in the templater stating that NoneType was not iterable. This patch makes
sure that a proper error is raised so that the user can be informed.
Tests have been updated.
--- a/mercurial/templater.py Fri Mar 07 14:06:52 2014 -0500
+++ b/mercurial/templater.py Thu Mar 27 17:21:27 2014 -0500
@@ -212,6 +212,7 @@
raise error.ParseError(_("filter %s expects one argument") % n)
f = context._filters[n]
return (runfilter, (args[0][0], args[0][1], f))
+ raise error.ParseError(_("unknown function '%s'") % n)
def date(context, mapping, args):
if not (1 <= len(args) <= 2):
--- a/tests/test-command-template.t Fri Mar 07 14:06:52 2014 -0500
+++ b/tests/test-command-template.t Thu Mar 27 17:21:27 2014 -0500
@@ -1416,6 +1416,12 @@
abort: template filter 'datefilter' is not compatible with keyword 'author'
[255]
+Thrown an error if a template function doesn't exist
+
+ $ hg tip --template '{foo()}\n'
+ hg: parse error: unknown function 'foo'
+ [255]
+
$ cd ..