[PATCH STABLE] templater: raise error for unknown func

Sean Farley sean.michael.farley at gmail.com
Thu Mar 27 17:44:46 CDT 2014


# HG changeset patch
# User Sean Farley <sean.michael.farley at gmail.com>
# Date 1395958887 18000
#      Thu Mar 27 17:21:27 2014 -0500
# Branch stable
# Node ID ccdbb91dda21f43001f86584ce7f3df35882d612
# Parent  dd2e25e49862213c73b5ea3412aa1fa5d8c92bab
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.

diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -210,10 +210,11 @@ def buildfunc(exp, context):
     if n in context._filters:
         if len(args) != 1:
             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 func '%s'") % n)
 
 def date(context, mapping, args):
     if not (1 <= len(args) <= 2):
         raise error.ParseError(_("date expects one or two arguments"))
 
diff --git a/tests/test-command-template.t b/tests/test-command-template.t
--- a/tests/test-command-template.t
+++ b/tests/test-command-template.t
@@ -1414,10 +1414,16 @@ Behind the scenes, this will throw Value
 
   $ hg tip --template '{author|email|date}\n'
   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 func 'foo'
+  [255]
+
   $ cd ..
 
 
 latesttag:
 


More information about the Mercurial-devel mailing list