# HG changeset patch # User Gregory Szorc # Date 2015-10-05 23:28:12 # Node ID a3f7e5461dbd7cfd7cbbe960aa23a622afe2afae # Parent d69245af4dbe83f546b46575c83a3efb840615aa 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. diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -1292,10 +1292,13 @@ class chunkbuffer(object): 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 @@ class chunkbuffer(object): 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: