# HG changeset patch # User Yuya Nishihara # Date 1552190856 -32400 # Node ID 4df7c4b70e03c1417e89cdf792f61a0b7541a427 # Parent 77ef3498ceb31c4c7118ef6ca87c43ec8d33dd6f templatefilters: add {x|cbor} filter for custom CBOR output diff -r 77ef3498ceb3 -r 4df7c4b70e03 mercurial/templatefilters.py --- a/mercurial/templatefilters.py Sun Mar 10 12:57:24 2019 +0900 +++ b/mercurial/templatefilters.py Sun Mar 10 13:07:36 2019 +0900 @@ -23,6 +23,7 @@ util, ) from .utils import ( + cborutil, dateutil, stringutil, ) @@ -99,6 +100,11 @@ """ return os.path.basename(path) +@templatefilter('cbor') +def cbor(obj): + """Any object. Serializes the object to CBOR bytes.""" + return b''.join(cborutil.streamencode(obj)) + @templatefilter('commondir') def commondir(filelist): """List of text. Treats each list item as file name with / diff -r 77ef3498ceb3 -r 4df7c4b70e03 tests/test-template-functions.t --- a/tests/test-template-functions.t Sun Mar 10 12:57:24 2019 +0900 +++ b/tests/test-template-functions.t Sun Mar 10 13:07:36 2019 +0900 @@ -1495,6 +1495,32 @@ 1200000.00 1300000.00 +Test cbor filter: + + $ cat <<'EOF' > "$TESTTMP/decodecbor.py" + > from __future__ import absolute_import + > from mercurial import pycompat + > from mercurial.utils import ( + > cborutil, + > stringutil, + > ) + > items = cborutil.decodeall(pycompat.stdin.read()) + > pycompat.stdout.write(stringutil.pprint(items, indent=1) + b'\n') + > EOF + + $ hg log -T "{rev|cbor}" -R a -l2 | "$PYTHON" "$TESTTMP/decodecbor.py" + [ + 10, + 9 + ] + + $ hg log -T "{extras|cbor}" -R a -l1 | "$PYTHON" "$TESTTMP/decodecbor.py" + [ + { + 'branch': 'default' + } + ] + json filter should escape HTML tags so that the output can be embedded in hgweb: $ hg log -T "{''|json}\n" -R a -l1