diff -r 95be8928d6b2 -r b13c95919ff5 mercurial/templater.py --- a/mercurial/templater.py Sat Oct 14 11:20:31 2017 -0400 +++ b/mercurial/templater.py Sat Oct 14 11:30:17 2017 -0400 @@ -1240,6 +1240,11 @@ thing = templatekw.unwraphybrid(thing) if isinstance(thing, bytes): yield thing + elif isinstance(thing, str): + # We can only hit this on Python 3, and it's here to guard + # against infinite recursion. + raise error.ProgrammingError('Mercurial IO including templates is done' + ' with bytes, not strings') elif thing is None: pass elif not util.safehasattr(thing, '__iter__'):