Mercurial > public > mercurial-scm > hg
diff mercurial/templater.py @ 31880:a0f2d83f8083
templater: remove __iter__() from _hybrid, resolve it explicitly
The goal is to fix "{hybrid_obj|json}" output.
A _hybrid object must act as a list or a dict as well as a generator of
legacy template strings. Before, _hybrid.__iter__() was assigned for legacy
template, which conflicted with list.__iter__() API.
This patch drops _hybrid.__iter__() and makes stringify/flatten functions
unwrap a generator instead.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Tue, 04 Apr 2017 22:19:02 +0900 |
parents | f0d719e513fc |
children | 25be03a33f50 |
line wrap: on
line diff
--- a/mercurial/templater.py Sun Apr 24 19:15:34 2016 +0900 +++ b/mercurial/templater.py Tue Apr 04 22:19:02 2017 +0900 @@ -1020,6 +1020,7 @@ def _flatten(thing): '''yield a single stream from a possibly nested set of iterators''' + thing = templatekw.unwraphybrid(thing) if isinstance(thing, str): yield thing elif thing is None: @@ -1028,6 +1029,7 @@ yield str(thing) else: for i in thing: + i = templatekw.unwraphybrid(i) if isinstance(i, str): yield i elif i is None: