Mercurial > public > mercurial-scm > hg-stable
diff mercurial/templater.py @ 27891:ac8c0ee5c3b8
templater: make _hybrid not callable to avoid conflicting semantics
In templater, a callable symbol exists for lazy evaluation, which should have
f(**mapping) signature. On the other hand, _hybrid.__call__(), which was
introduced by 0b241d7a8c62, generates mapping for each element.
This patch renames _hybrid.__call__() to _hybrid.itermaps() so that a _hybrid
object can be a value of a mapping dict.
{namespaces % "{namespace}: {names % "{name }"}\n"}
~~~~~
a _hybrid object
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 16 Jan 2016 13:42:37 +0900 |
parents | b502138f5faa |
children | 83aef8d5bc1b |
line wrap: on
line diff
--- a/mercurial/templater.py Fri Jan 15 13:46:33 2016 -0800 +++ b/mercurial/templater.py Sat Jan 16 13:42:37 2016 +0900 @@ -281,8 +281,8 @@ def runmap(context, mapping, data): func, data, ctmpl = data d = func(context, mapping, data) - if callable(d): - d = d() + if util.safehasattr(d, 'itermaps'): + d = d.itermaps() lm = mapping.copy() @@ -483,9 +483,9 @@ raise error.ParseError(_("join expects one or two arguments")) joinset = args[0][0](context, mapping, args[0][1]) - if callable(joinset): + if util.safehasattr(joinset, 'itermaps'): jf = joinset.joinfmt - joinset = [jf(x) for x in joinset()] + joinset = [jf(x) for x in joinset.itermaps()] joiner = " " if len(args) > 1: