Mercurial > hg-stable
diff mercurial/httpclient/_readers.py @ 19038:36733ab7fa05
http2: sane readline
It turns out that it pays off to read more than a byte at a time with
a select in between :)
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Fri, 01 Feb 2013 15:00:23 -0800 |
parents | 1fde25ad9396 |
children | fae47ecaa952 |
line wrap: on
line diff
--- a/mercurial/httpclient/_readers.py Fri Feb 01 14:41:35 2013 -0800 +++ b/mercurial/httpclient/_readers.py Fri Feb 01 15:00:23 2013 -0800 @@ -96,6 +96,29 @@ return result + def readto(self, delimstr, blocks = None): + """return available data chunks up to the first one in which delimstr + occurs. No data will be returned after delimstr -- the chunk in which + it occurs will be split and the remainder pushed back onto the available + data queue. If blocks is supplied chunks will be added to blocks, otherwise + a new list will be allocated. + """ + if blocks is None: + blocks = [] + + while self._done_chunks: + b = self.popchunk() + i = b.find(delimstr) + len(delimstr) + if i: + if i < len(b): + self.pushchunk(b[i:]) + blocks.append(b[:i]) + break + else: + blocks.append(b) + + return blocks + def _load(self, data): # pragma: no cover """Subclasses must implement this.