mercurial/statichttprepo.py
changeset 51899 e26a08563223
parent 51898 159854151f0f
child 51900 77a9c7d8a7ba
--- 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