mercurial/utils/stringutil.py
changeset 37300 2f859ad7ed8c
parent 37290 cc5a040fe150
child 37322 a67fd1fe5109
--- a/mercurial/utils/stringutil.py	Wed Mar 28 13:30:24 2018 -0700
+++ b/mercurial/utils/stringutil.py	Wed Mar 28 14:52:57 2018 -0700
@@ -37,6 +37,20 @@
 
     return _DATA_ESCAPE_RE.sub(lambda m: _DATA_ESCAPE_MAP[m.group(0)], s)
 
+def pprint(o):
+    """Pretty print an object."""
+    if isinstance(o, (bytes, bytearray)):
+        return "b'%s'" % escapedata(o)
+    elif isinstance(o, list):
+        return '[%s]' % (b', '.join(pprint(a) for a in o))
+    elif isinstance(o, dict):
+        return '{%s}' % (b', '.join(
+            '%s: %s' % (pprint(k), pprint(v)) for k, v in sorted(o.items())))
+    elif isinstance(o, bool):
+        return b'True' if o else b'False'
+    else:
+        raise error.ProgrammingError('do not know how to format %r' % o)
+
 def binary(s):
     """return true if a string is binary data"""
     return bool(s and '\0' in s)