comparison mercurial/revlog.py @ 30287:0986f225c149

revlog: reorder index accessors to match data structure order Index entries are ordered tuples. We have accessors in the revlog class to map tuple offsets to names. To help reinforce the order, reorder the methods so they match the order of elements in the tuple. While I'm here, also sneak in some minimal documentation.
author Gregory Szorc <gregory.szorc@gmail.com>
date Sun, 23 Oct 2016 09:34:55 -0700
parents 5e4f16874a9f
children ceddc3d94d74
comparison
equal deleted inserted replaced
30286:d44c407a5999 30287:0986f225c149
378 if v == node: 378 if v == node:
379 self._nodepos = r - 1 379 self._nodepos = r - 1
380 return r 380 return r
381 raise LookupError(node, self.indexfile, _('no node')) 381 raise LookupError(node, self.indexfile, _('no node'))
382 382
383 def node(self, rev): 383 # Accessors for index entries.
384 return self.index[rev][7] 384
385 def linkrev(self, rev): 385 # First tuple entry is 8 bytes. First 6 bytes are offset. Last 2 bytes
386 return self.index[rev][4] 386 # are flags.
387 def parents(self, node):
388 i = self.index
389 d = i[self.rev(node)]
390 return i[d[5]][7], i[d[6]][7] # map revisions to nodes inline
391 def parentrevs(self, rev):
392 return self.index[rev][5:7]
393 def start(self, rev): 387 def start(self, rev):
394 return int(self.index[rev][0] >> 16) 388 return int(self.index[rev][0] >> 16)
395 def end(self, rev): 389
396 return self.start(rev) + self.length(rev) 390 def flags(self, rev):
391 return self.index[rev][0] & 0xFFFF
392
397 def length(self, rev): 393 def length(self, rev):
398 return self.index[rev][1] 394 return self.index[rev][1]
395
396 def rawsize(self, rev):
397 """return the length of the uncompressed text for a given revision"""
398 l = self.index[rev][2]
399 if l >= 0:
400 return l
401
402 t = self.revision(self.node(rev))
403 return len(t)
404 size = rawsize
405
399 def chainbase(self, rev): 406 def chainbase(self, rev):
400 base = self._chainbasecache.get(rev) 407 base = self._chainbasecache.get(rev)
401 if base is not None: 408 if base is not None:
402 return base 409 return base
403 410
407 rev = base 414 rev = base
408 base = index[rev][3] 415 base = index[rev][3]
409 416
410 self._chainbasecache[rev] = base 417 self._chainbasecache[rev] = base
411 return base 418 return base
419
420 def linkrev(self, rev):
421 return self.index[rev][4]
422
423 def parentrevs(self, rev):
424 return self.index[rev][5:7]
425
426 def node(self, rev):
427 return self.index[rev][7]
428
429 # Derived from index values.
430
431 def end(self, rev):
432 return self.start(rev) + self.length(rev)
433
434 def parents(self, node):
435 i = self.index
436 d = i[self.rev(node)]
437 return i[d[5]][7], i[d[6]][7] # map revisions to nodes inline
438
412 def chainlen(self, rev): 439 def chainlen(self, rev):
413 return self._chaininfo(rev)[0] 440 return self._chaininfo(rev)[0]
414 441
415 def _chaininfo(self, rev): 442 def _chaininfo(self, rev):
416 chaininfocache = self._chaininfocache 443 chaininfocache = self._chaininfocache
475 chain.append(iterrev) 502 chain.append(iterrev)
476 stopped = False 503 stopped = False
477 504
478 chain.reverse() 505 chain.reverse()
479 return chain, stopped 506 return chain, stopped
480
481 def flags(self, rev):
482 return self.index[rev][0] & 0xFFFF
483 def rawsize(self, rev):
484 """return the length of the uncompressed text for a given revision"""
485 l = self.index[rev][2]
486 if l >= 0:
487 return l
488
489 t = self.revision(self.node(rev))
490 return len(t)
491 size = rawsize
492 507
493 def ancestors(self, revs, stoprev=0, inclusive=False): 508 def ancestors(self, revs, stoprev=0, inclusive=False):
494 """Generate the ancestors of 'revs' in reverse topological order. 509 """Generate the ancestors of 'revs' in reverse topological order.
495 Does not generate revs lower than stoprev. 510 Does not generate revs lower than stoprev.
496 511