D3504: cborutil: port to Python 3
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Tue May 8 19:27:07 UTC 2018
durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
The only problem lurking in here was sorts of mismatched types. The
sorts are only for output stability in our tests (sigh), so we just
build a phony sort key using the __name__ of types so that we only
compare like types against each other. By pure luck, my awful sort key
matches the behavior we get "for free" in Python 2, so no test output
changes.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D3504
AFFECTED FILES
mercurial/utils/cborutil.py
CHANGE DETAILS
diff --git a/mercurial/utils/cborutil.py b/mercurial/utils/cborutil.py
--- a/mercurial/utils/cborutil.py
+++ b/mercurial/utils/cborutil.py
@@ -140,12 +140,15 @@
yield BREAK
+def _mixedtypesortkey(v):
+ return type(v).__name__, v
+
def streamencodeset(s):
# https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml defines
# semantic tag 258 for finite sets.
yield encodelength(MAJOR_TYPE_SEMANTIC, 258)
- for chunk in streamencodearray(sorted(s)):
+ for chunk in streamencodearray(sorted(s, key=_mixedtypesortkey)):
yield chunk
def streamencodemap(d):
@@ -155,7 +158,8 @@
"""
yield encodelength(MAJOR_TYPE_MAP, len(d))
- for key, value in sorted(d.iteritems()):
+ for key, value in sorted(d.iteritems(),
+ key=lambda x: _mixedtypesortkey(x[0])):
for chunk in streamencode(key):
yield chunk
for chunk in streamencode(value):
To: durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list