247 return 'true' |
247 return 'true' |
248 elif isinstance(obj, (int, long, float)): |
248 elif isinstance(obj, (int, long, float)): |
249 return pycompat.bytestr(obj) |
249 return pycompat.bytestr(obj) |
250 elif isinstance(obj, bytes): |
250 elif isinstance(obj, bytes): |
251 return '"%s"' % encoding.jsonescape(obj, paranoid=paranoid) |
251 return '"%s"' % encoding.jsonescape(obj, paranoid=paranoid) |
252 elif isinstance(obj, str): |
252 elif isinstance(obj, type(u'')): |
253 # This branch is unreachable on Python 2, because bytes == str |
|
254 # and we'll return in the next-earlier block in the elif |
|
255 # ladder. On Python 3, this helps us catch bugs before they |
|
256 # hurt someone. |
|
257 raise error.ProgrammingError( |
253 raise error.ProgrammingError( |
258 'Mercurial only does output with bytes on Python 3: %r' % obj) |
254 'Mercurial only does output with bytes: %r' % obj) |
259 elif util.safehasattr(obj, 'keys'): |
255 elif util.safehasattr(obj, 'keys'): |
260 out = ['"%s": %s' % (encoding.jsonescape(k, paranoid=paranoid), |
256 out = ['"%s": %s' % (encoding.jsonescape(k, paranoid=paranoid), |
261 json(v, paranoid)) |
257 json(v, paranoid)) |
262 for k, v in sorted(obj.iteritems())] |
258 for k, v in sorted(obj.iteritems())] |
263 return '{' + ', '.join(out) + '}' |
259 return '{' + ', '.join(out) + '}' |