@@ -348,15 +348,14 @@ class _templateconverter(object):
data = util.sortdict(_iteritems(data))
def f():
yield _plainconverter.formatdict(data, key, value, fmt, sep)
- return templatekw.hybriddict(data, key=key, value=value, fmt=fmt,
- gen=f())
+ return templatekw.hybriddict(data, key=key, value=value, fmt=fmt, gen=f)
@staticmethod
def formatlist(data, name, fmt, sep):
'''build object that can be evaluated as either plain string or list'''
data = list(data)
def f():
yield _plainconverter.formatlist(data, name, fmt, sep)
- return templatekw.hybridlist(data, name=name, fmt=fmt, gen=f())
+ return templatekw.hybridlist(data, name=name, fmt=fmt, gen=f)
class templateformatter(baseformatter):
def __init__(self, ui, out, topic, opts):
@@ -39,15 +39,12 @@ class _hybrid(object):
def __init__(self, gen, values, makemap, joinfmt):
if gen is not None:
- self.gen = gen
+ self.gen = gen # generator or function returning generator
self._values = values
self._makemap = makemap
self.joinfmt = joinfmt
- @util.propertycache
def gen(self):
- return self._defaultgen()
- def _defaultgen(self):
- """Generator to stringify this as {join(self, ' ')}"""
+ """Default generator to stringify this as {join(self, ' ')}"""
for i, x in enumerate(self._values):
if i > 0:
yield ' '
@@ -104,9 +101,12 @@ def hybridlist(data, name, fmt='%s', gen
def unwraphybrid(thing):
"""Return an object which can be stringified possibly by using a legacy
template"""
- if not util.safehasattr(thing, 'gen'):
+ gen = getattr(thing, 'gen', None)
+ if gen is None:
return thing
- return thing.gen
+ if callable(gen):
+ return gen()
+ return gen
def unwrapvalue(thing):
"""Move the inner value object out of the wrapper"""
@@ -685,7 +685,7 @@ def showsuccessorssets(repo, ctx, **args
# Format the successorssets
def render(d):
t = []
- for i in d.gen:
+ for i in d.gen():
t.append(i)
return "".join(t)
@@ -760,8 +760,12 @@ Template keywords
3de5eca88c00 ????-??-?? (glob)
$ hg debugobsolete -r6 -T '{join(metadata % "{key}={value}", " ")}\n'
user=test <test@example.net>
- $ hg debugobsolete -r6 -T '{metadata}\n'
+ $ hg debugobsolete -r6 -T '{metadata}\n{metadata}\n'
+ 'user': 'test <test@example.net>'
'user': 'test <test@example.net>'
+ $ hg debugobsolete -r6 -T '{succnodes}\n{succnodes}\n'
+ 3de5eca88c00aa039da7399a220f4a5221faa585
+ 3de5eca88c00aa039da7399a220f4a5221faa585
$ hg debugobsolete -r6 -T '{flag} {get(metadata, "user")}\n'
0 test <test@example.net>