Mercurial > hg
changeset 31728:35eb8f112c88
templatefilter: add support for 'long' to json()
When disabling the '#requires serve' check in test-hgwebdir.t and running it on
Windows, several 500 errors popped up when querying '?style=json', with the
following in the error log:
File "...\\mercurial\\templater.py", line 393, in runfilter
"keyword '%s'") % (filt.func_name, dt))
Abort: template filter 'json' is not compatible with keyword 'lastchange'
The swallowed exception at that point was:
File "...\\mercurial\\templatefilters.py", line 242, in json
raise TypeError('cannot encode type %s' % obj.__class__.__name__)
TypeError: cannot encode type long
This corresponds to 'lastchange' being populated by hgweb.common.get_stat(),
which uses os.stat().st_mtime. os.stat_float_times() is being disabled in util,
so the type for the times is 'long' on Windows, and 'int' on Linux.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 01 Apr 2017 00:21:17 -0400 |
parents | 6be6e4becaaf |
children | c069c4e271e3 |
files | mercurial/templatefilters.py |
diffstat | 1 files changed, 1 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/templatefilters.py Thu Mar 30 21:40:10 2017 +0200 +++ b/mercurial/templatefilters.py Sat Apr 01 00:21:17 2017 -0400 @@ -221,7 +221,7 @@ def json(obj): if obj is None or obj is False or obj is True: return {None: 'null', False: 'false', True: 'true'}[obj] - elif isinstance(obj, int) or isinstance(obj, float): + elif isinstance(obj, (int, long, float)): return str(obj) elif isinstance(obj, str): return '"%s"' % encoding.jsonescape(obj, paranoid=True)