D3302: stringutil: support more types with pprint()

indygreg (Gregory Szorc) phabricator at mercurial-scm.org
Fri Apr 13 06:26:39 UTC 2018


indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D3302

AFFECTED FILES
  mercurial/utils/stringutil.py

CHANGE DETAILS

diff --git a/mercurial/utils/stringutil.py b/mercurial/utils/stringutil.py
--- a/mercurial/utils/stringutil.py
+++ b/mercurial/utils/stringutil.py
@@ -25,15 +25,23 @@
 
 def pprint(o):
     """Pretty print an object."""
-    if isinstance(o, (bytes, bytearray)):
+    if isinstance(o, bytes):
         return "b'%s'" % escapestr(o)
+    elif isinstance(o, bytearray):
+        # codecs.escape_encode() can't handle bytearray, so escapestr fails
+        # without coercion.
+        return "bytearray['%s']" % escapestr(bytes(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'
+    elif isinstance(o, int):
+        return '%d' % o
+    elif isinstance(o, float):
+        return '%f' % o
     else:
         raise error.ProgrammingError('do not know how to format %r' % o)
 



To: indygreg, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list