diff --git a/mercurial/templateutil.py b/mercurial/templateutil.py --- a/mercurial/templateutil.py +++ b/mercurial/templateutil.py @@ -263,18 +263,9 @@ def flatten(thing): def stringify(thing): """Turn values into bytes by converting into text and concatenating them""" - thing = unwraphybrid(thing) - if util.safehasattr(thing, '__iter__') and not isinstance(thing, bytes): - if isinstance(thing, str): - # This is only reachable on Python 3 (otherwise - # isinstance(thing, bytes) would have been true), and is - # here to prevent infinite recursion bugs on Python 3. - raise error.ProgrammingError( - 'stringify got unexpected unicode string: %r' % thing) - return "".join([stringify(t) for t in thing if t is not None]) - if thing is None: - return "" - return pycompat.bytestr(thing) + if isinstance(thing, bytes): + return thing # retain localstr to be round-tripped + return b''.join(flatten(thing)) def findsymbolicname(arg): """Find symbolic name for the given compiled expression; returns None