D5704: util: cast memoryview to bytes
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Sat Jan 26 00:02:26 UTC 2019
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
Python 3 uses readinto() instead of read() in places. And
taking a slice of the buffer passed to readinto() will produce
a memoryview. _writedata() then gets confused when testing for
`b'\n' in data` because memoryview is an iterable over ints
instead of 1 character bytes.
We work around by casting a memoryview to bytes.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5704
AFFECTED FILES
mercurial/util.py
CHANGE DETAILS
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -789,6 +789,12 @@
res))
data = dest[0:res] if res is not None else b''
+
+ # _writedata() uses "in" operator and is confused by memoryview because
+ # characters are ints on Python 3.
+ if isinstance(data, memoryview):
+ data = data.tobytes()
+
self._writedata(data)
def write(self, res, data):
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list