--- a/mercurial/worker.py Sat May 21 23:31:30 2022 +0200
+++ b/mercurial/worker.py Sun May 22 00:10:58 2022 +0200
@@ -79,35 +79,12 @@
def __init__(self, wrapped):
self._wrapped = wrapped
- # Do NOT implement readinto() by making it delegate to
- # _wrapped.readinto(), since that is unbuffered. The unpickler is fine
- # with just read() and readline(), so we don't need to implement it.
-
- if (3, 8, 0) <= sys.version_info[:3] < (3, 8, 2):
-
- # This is required for python 3.8, prior to 3.8.2. See issue6444.
- def readinto(self, b):
- pos = 0
- size = len(b)
-
- while pos < size:
- ret = self._wrapped.readinto(b[pos:])
- if not ret:
- break
- pos += ret
-
- return pos
-
def readline(self):
return self._wrapped.readline()
- # issue multiple reads until size is fulfilled (or EOF is encountered)
- def read(self, size=-1):
- if size < 0:
- return self._wrapped.readall()
-
- buf = bytearray(size)
+ def readinto(self, buf):
pos = 0
+ size = len(buf)
with memoryview(buf) as view:
while pos < size:
@@ -117,7 +94,16 @@
break
pos += ret
- del buf[pos:]
+ return pos
+
+ # issue multiple reads until size is fulfilled (or EOF is encountered)
+ def read(self, size=-1):
+ if size < 0:
+ return self._wrapped.readall()
+
+ buf = bytearray(size)
+ n_read = self.readinto(buf)
+ del buf[n_read:]
return bytes(buf)