comparison mercurial/utils/stringutil.py @ 37619:68132a95df31

stringutil: support more types with pprint() bytearray wasn't working. Integers and floats were not being formatted. I /think/ %f is portable across both Python 2 and 3, as it should default to 6 decimal points on each. Differential Revision: https://phab.mercurial-scm.org/D3302
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 12 Apr 2018 20:42:42 -0700
parents e9dea82ea1f3
children 3942bd8db8b2
comparison
equal deleted inserted replaced
37618:1edf3738e000 37619:68132a95df31
23 pycompat, 23 pycompat,
24 ) 24 )
25 25
26 def pprint(o): 26 def pprint(o):
27 """Pretty print an object.""" 27 """Pretty print an object."""
28 if isinstance(o, (bytes, bytearray)): 28 if isinstance(o, bytes):
29 return "b'%s'" % escapestr(o) 29 return "b'%s'" % escapestr(o)
30 elif isinstance(o, bytearray):
31 # codecs.escape_encode() can't handle bytearray, so escapestr fails
32 # without coercion.
33 return "bytearray['%s']" % escapestr(bytes(o))
30 elif isinstance(o, list): 34 elif isinstance(o, list):
31 return '[%s]' % (b', '.join(pprint(a) for a in o)) 35 return '[%s]' % (b', '.join(pprint(a) for a in o))
32 elif isinstance(o, dict): 36 elif isinstance(o, dict):
33 return '{%s}' % (b', '.join( 37 return '{%s}' % (b', '.join(
34 '%s: %s' % (pprint(k), pprint(v)) for k, v in sorted(o.items()))) 38 '%s: %s' % (pprint(k), pprint(v)) for k, v in sorted(o.items())))
35 elif isinstance(o, bool): 39 elif isinstance(o, bool):
36 return b'True' if o else b'False' 40 return b'True' if o else b'False'
41 elif isinstance(o, int):
42 return '%d' % o
43 elif isinstance(o, float):
44 return '%f' % o
37 else: 45 else:
38 raise error.ProgrammingError('do not know how to format %r' % o) 46 raise error.ProgrammingError('do not know how to format %r' % o)
39 47
40 def binary(s): 48 def binary(s):
41 """return true if a string is binary data""" 49 """return true if a string is binary data"""