Mercurial > hg-stable
changeset 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 | d69245af4dbe |
children | 46143f31290e |
files | mercurial/util.py |
diffstat | 1 files changed, 6 insertions(+), 4 deletions(-) [+] |
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: