Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlog.py @ 2289:854954fd410a
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).
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Sun, 14 May 2006 18:22:12 -0300 |
parents | 3f38e872f39a |
children | 9c15f85e61b1 |
comparison
equal
deleted
inserted
replaced
2280:09ed44225571 | 2289:854954fd410a |
---|---|
403 if not data: | 403 if not data: |
404 break | 404 break |
405 if n == 0 and self.inlinedata(): | 405 if n == 0 and self.inlinedata(): |
406 # cache the first chunk | 406 # cache the first chunk |
407 self.chunkcache = (0, data) | 407 self.chunkcache = (0, data) |
408 if leftover: | |
409 data = leftover + data | |
410 leftover = None | |
408 off = 0 | 411 off = 0 |
409 l = len(data) | 412 l = len(data) |
410 while off < l: | 413 while off < l: |
411 if l - off < s: | 414 if l - off < s: |
412 leftover = data[off:] | 415 leftover = data[off:] |
413 break | 416 break |
414 if leftover: | 417 cur = data[off:off + s] |
415 cur = leftover + data[off:off + s - len(leftover)] | 418 off += s |
416 off += s - len(leftover) | |
417 leftover = None | |
418 else: | |
419 cur = data[off:off + s] | |
420 off += s | |
421 e = struct.unpack(self.indexformat, cur) | 419 e = struct.unpack(self.indexformat, cur) |
422 self.index.append(e) | 420 self.index.append(e) |
423 self.nodemap[e[-1]] = n | 421 self.nodemap[e[-1]] = n |
424 n += 1 | 422 n += 1 |
425 if inline: | 423 if inline: |