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: