376 % (self.indexfile, flags >> 16)) |
376 % (self.indexfile, flags >> 16)) |
377 else: |
377 else: |
378 raise RevlogError(_("index %s unknown format %d") |
378 raise RevlogError(_("index %s unknown format %d") |
379 % (self.indexfile, fmt)) |
379 % (self.indexfile, fmt)) |
380 self.version = v |
380 self.version = v |
381 if v == REVLOGV0: |
381 self.nodemap = {nullid: nullrev} |
|
382 self.index = [] |
|
383 self.indexformat = indexformatng |
|
384 if self.version == REVLOGV0: |
382 self.indexformat = indexformatv0 |
385 self.indexformat = indexformatv0 |
|
386 if i: |
|
387 self._parseindex(f, st) |
|
388 |
|
389 def _parseindex(self, fp, st): |
|
390 shaoffset = ngshaoffset |
|
391 if self.version == REVLOGV0: |
383 shaoffset = v0shaoffset |
392 shaoffset = v0shaoffset |
384 else: |
393 |
385 self.indexformat = indexformatng |
394 if (lazyparser.safe_to_use and not self._inline() and |
386 shaoffset = ngshaoffset |
395 st and st.st_size > 10000): |
387 |
396 # big index, let's parse it on demand |
388 if i: |
397 parser = lazyparser(fp, st.st_size, self.indexformat, shaoffset) |
389 if (lazyparser.safe_to_use and not self._inline() and |
398 self.index = lazyindex(parser) |
390 st and st.st_size > 10000): |
399 self.nodemap = lazymap(parser) |
391 # big index, let's parse it on demand |
|
392 parser = lazyparser(f, st.st_size, self.indexformat, shaoffset) |
|
393 self.index = lazyindex(parser) |
|
394 self.nodemap = lazymap(parser) |
|
395 else: |
|
396 self._parseindex(f, st) |
|
397 if self.version != REVLOGV0: |
400 if self.version != REVLOGV0: |
398 e = list(self.index[0]) |
401 e = list(self.index[0]) |
399 type = gettype(e[0]) |
402 type = gettype(e[0]) |
400 e[0] = offset_type(0, type) |
403 e[0] = offset_type(0, type) |
401 self.index[0] = e |
404 self.index[0] = e |
402 else: |
405 return |
403 self.nodemap = {nullid: nullrev} |
406 |
404 self.index = [] |
|
405 |
|
406 def _parseindex(self, fp, st): |
|
407 s = struct.calcsize(self.indexformat) |
407 s = struct.calcsize(self.indexformat) |
408 self.index = [] |
408 self.index = [] |
409 self.nodemap = {nullid: nullrev} |
409 self.nodemap = {nullid: nullrev} |
410 inline = self._inline() |
410 inline = self._inline() |
411 n = 0 |
411 n = 0 |
445 fp.read(off - l) |
445 fp.read(off - l) |
446 break |
446 break |
447 if not st: |
447 if not st: |
448 break |
448 break |
449 |
449 |
|
450 if self.version != REVLOGV0: |
|
451 e = list(self.index[0]) |
|
452 type = gettype(e[0]) |
|
453 e[0] = offset_type(0, type) |
|
454 self.index[0] = e |
450 |
455 |
451 def _loadindex(self, start, end): |
456 def _loadindex(self, start, end): |
452 """load a block of indexes all at once from the lazy parser""" |
457 """load a block of indexes all at once from the lazy parser""" |
453 if isinstance(self.index, lazyindex): |
458 if isinstance(self.index, lazyindex): |
454 self.index.p.loadindex(start, end) |
459 self.index.p.loadindex(start, end) |