diff mercurial/templatefilters.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 654e9a1c8a6c
children e5eab0fe69ee
line wrap: on
line diff
--- a/mercurial/templatefilters.py	Sun Apr 24 19:15:34 2016 +0900
+++ b/mercurial/templatefilters.py	Tue Apr 04 22:19:02 2017 +0900
@@ -350,6 +350,7 @@
     """Any type. Turns the value into text by converting values into
     text and concatenating them.
     """
+    thing = templatekw.unwraphybrid(thing)
     if util.safehasattr(thing, '__iter__') and not isinstance(thing, str):
         return "".join([stringify(t) for t in thing if t is not None])
     if thing is None: