Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revlog.py @ 4971:3e6dae278c99
revlog: regroup parsing code
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 23 Jul 2007 20:44:07 -0500 |
parents | ee983d0dbea8 |
children | 8d0cf46e0dc6 |
comparison
equal
deleted
inserted
replaced
4970:30d4d8985dd8 | 4971:3e6dae278c99 |
---|---|
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) |