Show More
@@ -376,12 +376,7 b' class revlog(object):' | |||
|
376 | 376 | self.index = lazyindex(parser) |
|
377 | 377 | self.nodemap = lazymap(parser) |
|
378 | 378 | else: |
|
379 |
i |
|
|
380 | self.parseindex(i) | |
|
381 | if self.inlinedata(): | |
|
382 | # we've already got the entire data file read in, save it | |
|
383 | # in the chunk data | |
|
384 | self.chunkcache = (0, i) | |
|
379 | self.parseindex(f, st) | |
|
385 | 380 | if self.version != REVLOGV0: |
|
386 | 381 | e = list(self.index[0]) |
|
387 | 382 | type = self.ngtype(e[0]) |
@@ -392,22 +387,49 b' class revlog(object):' | |||
|
392 | 387 | self.index = [] |
|
393 | 388 | |
|
394 | 389 | |
|
395 |
def parseindex(self, |
|
|
390 | def parseindex(self, fp, st): | |
|
396 | 391 | s = struct.calcsize(self.indexformat) |
|
397 | l = len(data) | |
|
398 | 392 | self.index = [] |
|
399 | 393 | self.nodemap = {nullid: -1} |
|
400 | 394 | inline = self.inlinedata() |
|
401 | off = 0 | |
|
402 | 395 | n = 0 |
|
403 | while off < l: | |
|
404 | e = struct.unpack(self.indexformat, data[off:off + s]) | |
|
405 | self.index.append(e) | |
|
406 | self.nodemap[e[-1]] = n | |
|
407 |
|
|
|
408 | off += s | |
|
409 | if inline: | |
|
410 | off += e[1] | |
|
396 | leftover = None | |
|
397 | while True: | |
|
398 | if st: | |
|
399 | data = fp.read(65536) | |
|
400 | else: | |
|
401 | # hack for httprangereader, it doesn't do partial reads well | |
|
402 | data = fp.read() | |
|
403 | if not data: | |
|
404 | break | |
|
405 | if n == 0 and self.inlinedata(): | |
|
406 | # cache the first chunk | |
|
407 | self.chunkcache = (0, data) | |
|
408 | off = 0 | |
|
409 | l = len(data) | |
|
410 | while off < l: | |
|
411 | if l - off < s: | |
|
412 | leftover = data[off:] | |
|
413 | break | |
|
414 | if leftover: | |
|
415 | cur = leftover + data[off:off + s - len(leftover)] | |
|
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) | |
|
422 | self.index.append(e) | |
|
423 | self.nodemap[e[-1]] = n | |
|
424 | n += 1 | |
|
425 | if inline: | |
|
426 | off += e[1] | |
|
427 | if off > l: | |
|
428 | # some things don't seek well, just read it | |
|
429 | fp.read(off - l) | |
|
430 | if not st: | |
|
431 | break | |
|
432 | ||
|
411 | 433 | |
|
412 | 434 | def ngoffset(self, q): |
|
413 | 435 | if q & 0xFFFF: |
General Comments 0
You need to be logged in to leave comments.
Login now