templater: extract private function to evaluate generator to byte string
authorYuya Nishihara <yuya@tcha.org>
Fri, 23 Mar 2018 21:40:16 +0900
changeset 37278 671a01cd50b5
parent 37277 9e8128e84326
child 37279 26f6fc179e62
templater: extract private function to evaluate generator to byte string
mercurial/templateutil.py
--- a/mercurial/templateutil.py	Sun Mar 18 23:14:21 2018 +0900
+++ b/mercurial/templateutil.py	Fri Mar 23 21:40:16 2018 +0900
@@ -313,6 +313,12 @@
         else:
             return None
 
+def _unthunk(context, mapping, thing):
+    """Evaluate a lazy byte string into value"""
+    if not isinstance(thing, types.GeneratorType):
+        return thing
+    return stringify(context, mapping, thing)
+
 def evalrawexp(context, mapping, arg):
     """Evaluate given argument as a bare template object which may require
     further processing (such as folding generator of strings)"""
@@ -330,9 +336,7 @@
     thing = unwrapvalue(context, mapping, thing)
     # evalrawexp() may return string, generator of strings or arbitrary object
     # such as date tuple, but filter does not want generator.
-    if isinstance(thing, types.GeneratorType):
-        thing = stringify(context, mapping, thing)
-    return thing
+    return _unthunk(context, mapping, thing)
 
 def evalboolean(context, mapping, arg):
     """Evaluate given argument as boolean, but also takes boolean literals"""