templatefilters: add {x|cbor} filter for custom CBOR output
authorYuya Nishihara <yuya@tcha.org>
Sun, 10 Mar 2019 13:07:36 +0900
changeset 41997 4df7c4b70e03
parent 41996 77ef3498ceb3
child 41998 018acb7a3490
templatefilters: add {x|cbor} filter for custom CBOR output
mercurial/templatefilters.py
tests/test-template-functions.t
--- 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 /
--- 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 "{'<foo@example.org>'|json}\n" -R a -l1