diff mercurial/util.py @ 26478:a3f7e5461dbd

util.chunkbuffer: special case reading everything The new code results in simpler logic within the while loop. It is also faster since we avoid performing operations on the queue and buf collections. However, there shouldn't be any super hot loops for this since the whole point of chunkbuffer is to avoid reading large amounts of data at once. This does, however, make it easier to optimize chunkbuffer in a subsequent patch.
author Gregory Szorc <gregory.szorc@gmail.com>
date Mon, 05 Oct 2015 16:28:12 -0700
parents 1138e1d05207
children 46143f31290e
line wrap: on
line diff
--- a/mercurial/util.py	Mon Oct 05 07:13:35 2015 +0200
+++ b/mercurial/util.py	Mon Oct 05 16:28:12 2015 -0700
@@ -1292,10 +1292,13 @@
         Returns less than L bytes if the iterator runs dry.
 
         If size parameter is omitted, read everything"""
+        if l is None:
+            return ''.join(self.iter)
+
         left = l
         buf = []
         queue = self._queue
-        while left is None or left > 0:
+        while left > 0:
             # refill the queue
             if not queue:
                 target = 2**18
@@ -1308,9 +1311,8 @@
                     break
 
             chunk = queue.popleft()
-            if left is not None:
-                left -= len(chunk)
-            if left is not None and left < 0:
+            left -= len(chunk)
+            if left < 0:
                 queue.appendleft(chunk[left:])
                 buf.append(chunk[:left])
             else: