diff -r e9aadee698cf -r 2f859ad7ed8c mercurial/utils/stringutil.py --- 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)