hgmo: handle binary data during json serialization (bug 1268128); r?smacleod draft
authorGregory Szorc <gps@mozilla.com>
Wed, 27 Apr 2016 13:54:57 -0700
changeset 7934 f3bb9ffee126817e06bd3550899332c5b4b129a7
parent 7933 8ff17b8b1167f7ac09a8de655da54292ca6710bd
push id780
push usergszorc@mozilla.com
push dateWed, 27 Apr 2016 20:55:08 +0000
reviewerssmacleod
bugs1268128
hgmo: handle binary data during json serialization (bug 1268128); r?smacleod MozReview-Commit-ID: dAB6BAhUx1
hgext/hgmo/__init__.py
--- a/hgext/hgmo/__init__.py
+++ b/hgext/hgmo/__init__.py
@@ -401,17 +401,20 @@ def automationrelevancewebcommand(web, r
             elif k in deletefields:
                 del entry[k]
             elif isinstance(v, types.GeneratorType):
                 entry[k] = list(v)
 
         csets.append(entry)
 
     req.respond(HTTP_OK, 'application/json')
-    return json.dumps({'changesets': csets}, indent=2, sort_keys=True)
+    # We use latin1 as the encoding here because all data should be treated as
+    # byte strings. ensure_ascii will escape non-ascii values using \uxxxx.
+    return json.dumps({'changesets': csets}, indent=2, sort_keys=True,
+                      encoding='latin1')
 
 
 def revset_reviewer(repo, subset, x):
     """``reviewer(REVIEWER)``
 
     Changesets reviewed by a specific person.
     """
     l = revset.getargs(x, 1, 1, 'reviewer requires one argument')