templater: extract helper that evaluates filter or function argument
It will be used to get a date tuple from an argument. Perhaps some of
"stringify(args[n][0], ...)" can be replaced by this function.
--- a/mercurial/templater.py Fri Aug 28 16:59:31 2015 -0500
+++ b/mercurial/templater.py Tue Sep 01 18:57:50 2015 +0900
@@ -215,6 +215,15 @@
return context._load(exp[1])
raise error.ParseError(_("expected template specifier"))
+def evalfuncarg(context, mapping, arg):
+ func, data = arg
+ # func() may return string, generator of strings or arbitrary object such
+ # as date tuple, but filter does not want generator.
+ thing = func(context, mapping, data)
+ if isinstance(thing, types.GeneratorType):
+ thing = stringify(thing)
+ return thing
+
def runinteger(context, mapping, data):
return int(data)
@@ -259,11 +268,7 @@
def runfilter(context, mapping, data):
func, data, filt = data
- # func() may return string, generator of strings or arbitrary object such
- # as date tuple, but filter does not want generator.
- thing = func(context, mapping, data)
- if isinstance(thing, types.GeneratorType):
- thing = stringify(thing)
+ thing = evalfuncarg(context, mapping, (func, data))
try:
return filt(thing)
except (ValueError, AttributeError, TypeError):