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)