Mercurial > hg
changeset 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 | ce76c4d2b85c |
children | 83aef8d5bc1b |
files | mercurial/templatekw.py mercurial/templater.py |
diffstat | 2 files changed, 5 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templatekw.py Fri Jan 15 13:46:33 2016 -0800 +++ b/mercurial/templatekw.py Sat Jan 16 13:42:37 2016 +0900 @@ -34,7 +34,7 @@ self.joinfmt = lambda x: x.values()[0] def __iter__(self): return self.gen - def __call__(self): + def itermaps(self): makemap = self._makemap for x in self.values: yield makemap(x)
--- 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: