py3: for statprof's Chrome output, write json to string, then encode to bytes
`json.dump(obj, fp)` requires `fp.write()` to accept str output, and
since the file pointer we have there only accepts bytes, we need to
change to json.dumps() and then encode as utf-8. We have already done
the same thing for the json (non-Chrome) format in
4b7eb862692e (py3:
encode json output to bytes and use write(), 2018-10-12).
Differential Revision: https://phab.mercurial-scm.org/D6781
--- a/mercurial/statprof.py Fri Aug 30 16:44:31 2019 -0700
+++ b/mercurial/statprof.py Fri Aug 30 15:30:47 2019 -0700
@@ -875,7 +875,10 @@
if idx not in blacklist]
frames = collections.OrderedDict((str(k), v)
for (k,v) in enumerate(id2stack))
- json.dump(dict(traceEvents=events, stackFrames=frames), fp, indent=1)
+ data = json.dumps(dict(traceEvents=events, stackFrames=frames), indent=1)
+ if not isinstance(data, bytes):
+ data = data.encode('utf-8')
+ fp.write(data)
fp.write('\n')
def printusage():