diff mercurial/formatter.py @ 36634:cafd0586876b

templater: byte-stringify dict/list values before passing to default format bytestr() is applied only when no custom format string like '%d' is specified.
author Yuya Nishihara <yuya@tcha.org>
date Thu, 01 Mar 2018 08:14:54 -0500
parents 034a07e60e98
children 6ff6e1d6b5b8
line wrap: on
line diff
--- a/mercurial/formatter.py	Thu Mar 01 08:07:22 2018 -0500
+++ b/mercurial/formatter.py	Thu Mar 01 08:14:54 2018 -0500
@@ -248,15 +248,20 @@
     @staticmethod
     def formatdict(data, key, value, fmt, sep):
         '''stringify key-value pairs separated by sep'''
+        prefmt = pycompat.identity
         if fmt is None:
             fmt = '%s=%s'
-        return sep.join(fmt % (k, v) for k, v in _iteritems(data))
+            prefmt = pycompat.bytestr
+        return sep.join(fmt % (prefmt(k), prefmt(v))
+                        for k, v in _iteritems(data))
     @staticmethod
     def formatlist(data, name, fmt, sep):
         '''stringify iterable separated by sep'''
+        prefmt = pycompat.identity
         if fmt is None:
             fmt = '%s'
-        return sep.join(fmt % e for e in data)
+            prefmt = pycompat.bytestr
+        return sep.join(fmt % prefmt(e) for e in data)
 
 class plainformatter(baseformatter):
     '''the default text output scheme'''