231 return 'true' |
232 return 'true' |
232 elif isinstance(obj, (int, long, float)): |
233 elif isinstance(obj, (int, long, float)): |
233 return pycompat.bytestr(obj) |
234 return pycompat.bytestr(obj) |
234 elif isinstance(obj, bytes): |
235 elif isinstance(obj, bytes): |
235 return '"%s"' % encoding.jsonescape(obj, paranoid=paranoid) |
236 return '"%s"' % encoding.jsonescape(obj, paranoid=paranoid) |
|
237 elif isinstance(obj, str): |
|
238 # This branch is unreachable on Python 2, because bytes == str |
|
239 # and we'll return in the next-earlier block in the elif |
|
240 # ladder. On Python 3, this helps us catch bugs before they |
|
241 # hurt someone. |
|
242 raise error.ProgrammingError( |
|
243 'Mercurial only does output with bytes on Python 3: %r' % obj) |
236 elif util.safehasattr(obj, 'keys'): |
244 elif util.safehasattr(obj, 'keys'): |
237 out = ['"%s": %s' % (encoding.jsonescape(k, paranoid=paranoid), |
245 out = ['"%s": %s' % (encoding.jsonescape(k, paranoid=paranoid), |
238 json(v, paranoid)) |
246 json(v, paranoid)) |
239 for k, v in sorted(obj.iteritems())] |
247 for k, v in sorted(obj.iteritems())] |
240 return '{' + ', '.join(out) + '}' |
248 return '{' + ', '.join(out) + '}' |