# HG changeset patch # User Matt Harbison # Date 1536114578 14400 # Node ID 8d858fbf2759a7f5397fe19f71087d210dbc25a4 # Parent ab452995eafffa69c34e863e4d8c03e163d8f3ad cbor: teach the encoder to handle python `long` type for Windows The tests for 2**32 and -7000000000 were blowing up, complaining about not knowing how to encode type 'long'. sys.maxint tops out at 2**31-1 on Windows, but I guess is 2^63-1 on Linux? I *think* we're OK on the decode side, as there is an assertion that the decoded value is equal to the original primitive value. I opted for the pycompat alias instead of swallowing the NameError because the vendored cbor package uses an alias, and I see at least pywatchman and templatefilters open codes their own aliases. diff -r ab452995eaff -r 8d858fbf2759 mercurial/pycompat.py --- a/mercurial/pycompat.py Tue Sep 04 20:48:22 2018 -0400 +++ b/mercurial/pycompat.py Tue Sep 04 22:29:38 2018 -0400 @@ -120,6 +120,8 @@ rawinput = input getargspec = inspect.getfullargspec + long = int + # TODO: .buffer might not exist if std streams were replaced; we'll need # a silly wrapper to make a bytes stream backed by a unicode one. stdin = sys.stdin.buffer @@ -384,6 +386,7 @@ ospardir = os.pardir ossep = os.sep osaltsep = os.altsep + long = long stdin = sys.stdin stdout = sys.stdout stderr = sys.stderr diff -r ab452995eaff -r 8d858fbf2759 mercurial/utils/cborutil.py --- a/mercurial/utils/cborutil.py Tue Sep 04 20:48:22 2018 -0400 +++ b/mercurial/utils/cborutil.py Tue Sep 04 22:29:38 2018 -0400 @@ -10,6 +10,8 @@ import struct import sys +from .. import pycompat + # Very short very of RFC 7049... # # Each item begins with a byte. The 3 high bits of that byte denote the @@ -190,6 +192,7 @@ STREAM_ENCODERS = { bytes: streamencodebytestring, int: streamencodeint, + pycompat.long: streamencodeint, list: streamencodearray, tuple: streamencodearray, dict: streamencodemap,