Patchwork [STABLE] templater: raise error for unknown func

login
register
mail settings
Submitter Sean Farley
Date March 27, 2014, 10:44 p.m.
Message ID <ccdbb91dda21f43001f8.1395960286@laptop.local>
Download mbox | patch
Permalink /patch/4089/
State Accepted
Headers show

Comments

Sean Farley - March 27, 2014, 10:44 p.m.
# HG changeset patch
# User Sean Farley <sean.michael.farley@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.
Matt Mackall - March 27, 2014, 11:16 p.m.
On Thu, 2014-03-27 at 17:44 -0500, Sean Farley wrote:
> # HG changeset patch
> # User Sean Farley <sean.michael.farley@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

Queued for stable w s/func/function/, thanks.

Patch

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: