# HG changeset patch # User Yuya Nishihara # Date 2018-03-23 12:40:16 # Node ID 671a01cd50b51317a6324e4fe4c22f62d44347df # Parent 9e8128e843263993b491bec02ffa03ecc87dbe4f templater: extract private function to evaluate generator to byte string diff --git a/mercurial/templateutil.py b/mercurial/templateutil.py --- a/mercurial/templateutil.py +++ b/mercurial/templateutil.py @@ -313,6 +313,12 @@ def findsymbolicname(arg): 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 @@ def _unwrapvalue(context, mapping, thing 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"""