--- a/mercurial/statichttprepo.py Wed Sep 25 00:52:44 2024 -0400
+++ b/mercurial/statichttprepo.py Wed Sep 25 01:12:39 2024 -0400
@@ -52,11 +52,14 @@
def seek(self, pos):
self.pos = pos
- def read(self, bytes=None):
+ def read(self, bytes: int = -1):
req = urlreq.request(pycompat.strurl(self.url))
- end = b''
- if bytes:
- end = self.pos + bytes - 1
+ end = ''
+
+ if bytes == 0:
+ return b''
+ elif bytes > 0:
+ end = "%d" % (self.pos + bytes - 1)
if self.pos or end:
req.add_header('Range', 'bytes=%d-%s' % (self.pos, end))
@@ -76,11 +79,13 @@
if code == 200:
# HTTPRangeHandler does nothing if remote does not support
# Range headers and returns the full entity. Let's slice it.
- if bytes:
+ if bytes > 0 and (self.pos + bytes) < len(data):
data = data[self.pos : self.pos + bytes]
+ elif self.pos < len(data):
+ data = data[self.pos :]
else:
- data = data[self.pos :]
- elif bytes:
+ data = b''
+ elif 0 < bytes < len(data):
data = data[:bytes]
self.pos += len(data)
return data