Fix revlog.parseindex
parseindex could fail if read returns too little data in the right
moment (e.g. when there's still leftover data from the previous
iteration and read returns less than "s" bytes).
--- a/mercurial/revlog.py Sun May 14 18:24:32 2006 +0200
+++ b/mercurial/revlog.py Sun May 14 18:22:12 2006 -0300
@@ -405,19 +405,17 @@
if n == 0 and self.inlinedata():
# cache the first chunk
self.chunkcache = (0, data)
+ if leftover:
+ data = leftover + data
+ leftover = None
off = 0
l = len(data)
while off < l:
if l - off < s:
leftover = data[off:]
break
- if leftover:
- cur = leftover + data[off:off + s - len(leftover)]
- off += s - len(leftover)
- leftover = None
- else:
- cur = data[off:off + s]
- off += s
+ cur = data[off:off + s]
+ off += s
e = struct.unpack(self.indexformat, cur)
self.index.append(e)
self.nodemap[e[-1]] = n