Mercurial > public > mercurial-scm > hg-stable
diff mercurial/templatefilters.py @ 44603:7333e8bb9781
templater: fix cbor() filter to recursively convert smartset to list
The previous attempt, e3e44e6e7245 "templater: fix cbor() filter to accept
smartset", was incomplete since obj may be a collection containing a smartset.
This works around the problem by converting smartsets recursively. Another
option is to teach cborutil how to encode a smartset. That should be okay,
but I hesitated to add "import smartset" to cborutil.py as the cborutil is
pretty generic.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Thu, 26 Mar 2020 00:07:12 +0900 |
parents | e3e44e6e7245 |
children | 89a2afe31e82 |
line wrap: on
line diff
--- a/mercurial/templatefilters.py Mon Mar 23 15:14:42 2020 -0700 +++ b/mercurial/templatefilters.py Thu Mar 26 00:07:12 2020 +0900 @@ -106,12 +106,17 @@ return os.path.basename(path) +def _tocborencodable(obj): + if isinstance(obj, smartset.abstractsmartset): + return list(obj) + return obj + + @templatefilter(b'cbor') def cbor(obj): """Any object. Serializes the object to CBOR bytes.""" - if isinstance(obj, smartset.abstractsmartset): - # cborutil is stricter about type than json() filter - obj = list(obj) + # cborutil is stricter about type than json() filter + obj = pycompat.rapply(_tocborencodable, obj) return b''.join(cborutil.streamencode(obj))