##// END OF EJS Templates
revlog: move the `deltachain` method on the inner object...
marmoute -
r51988:30f458fc default
parent child Browse files
Show More
@@ -460,6 +460,47 b' class _InnerRevlog:'
460 460 return False
461 461 return self.issnapshot(base)
462 462
463 def _deltachain(self, rev, stoprev=None):
464 """Obtain the delta chain for a revision.
465
466 ``stoprev`` specifies a revision to stop at. If not specified, we
467 stop at the base of the chain.
468
469 Returns a 2-tuple of (chain, stopped) where ``chain`` is a list of
470 revs in ascending order and ``stopped`` is a bool indicating whether
471 ``stoprev`` was hit.
472 """
473 generaldelta = self.delta_config.general_delta
474 # Try C implementation.
475 try:
476 return self.index.deltachain(rev, stoprev, generaldelta)
477 except AttributeError:
478 pass
479
480 chain = []
481
482 # Alias to prevent attribute lookup in tight loop.
483 index = self.index
484
485 iterrev = rev
486 e = index[iterrev]
487 while iterrev != e[3] and iterrev != stoprev:
488 chain.append(iterrev)
489 if generaldelta:
490 iterrev = e[3]
491 else:
492 iterrev -= 1
493 e = index[iterrev]
494
495 if iterrev == stoprev:
496 stopped = True
497 else:
498 chain.append(iterrev)
499 stopped = False
500
501 chain.reverse()
502 return chain, stopped
503
463 504 @util.propertycache
464 505 def _compressor(self):
465 506 engine = util.compengines[self.feature_config.compression_engine]
@@ -1003,7 +1044,6 b' class revlog:'
1003 1044
1004 1045 chunk_cache = self._loadindex()
1005 1046 self._load_inner(chunk_cache)
1006
1007 1047 self._concurrencychecker = concurrencychecker
1008 1048
1009 1049 @property
@@ -1823,45 +1863,7 b' class revlog:'
1823 1863 return r
1824 1864
1825 1865 def _deltachain(self, rev, stoprev=None):
1826 """Obtain the delta chain for a revision.
1827
1828 ``stoprev`` specifies a revision to stop at. If not specified, we
1829 stop at the base of the chain.
1830
1831 Returns a 2-tuple of (chain, stopped) where ``chain`` is a list of
1832 revs in ascending order and ``stopped`` is a bool indicating whether
1833 ``stoprev`` was hit.
1834 """
1835 generaldelta = self.delta_config.general_delta
1836 # Try C implementation.
1837 try:
1838 return self.index.deltachain(rev, stoprev, generaldelta)
1839 except AttributeError:
1840 pass
1841
1842 chain = []
1843
1844 # Alias to prevent attribute lookup in tight loop.
1845 index = self.index
1846
1847 iterrev = rev
1848 e = index[iterrev]
1849 while iterrev != e[3] and iterrev != stoprev:
1850 chain.append(iterrev)
1851 if generaldelta:
1852 iterrev = e[3]
1853 else:
1854 iterrev -= 1
1855 e = index[iterrev]
1856
1857 if iterrev == stoprev:
1858 stopped = True
1859 else:
1860 chain.append(iterrev)
1861 stopped = False
1862
1863 chain.reverse()
1864 return chain, stopped
1866 return self._inner._deltachain(rev, stoprev=stoprev)
1865 1867
1866 1868 def ancestors(self, revs, stoprev=0, inclusive=False):
1867 1869 """Generate the ancestors of 'revs' in reverse revision order.
@@ -2496,7 +2498,7 b' class revlog:'
2496 2498 """number of snapshot in the chain before this one"""
2497 2499 if not self.issnapshot(rev):
2498 2500 raise error.ProgrammingError(b'revision %d not a snapshot')
2499 return len(self._deltachain(rev)[0]) - 1
2501 return len(self._inner._deltachain(rev)[0]) - 1
2500 2502
2501 2503 def revdiff(self, rev1, rev2):
2502 2504 """return or calculate a delta between two revisions
@@ -2594,7 +2596,7 b' class revlog:'
2594 2596 if rev is None:
2595 2597 rev = self.rev(node)
2596 2598
2597 chain, stopped = self._deltachain(rev, stoprev=cachedrev)
2599 chain, stopped = self._inner._deltachain(rev, stoprev=cachedrev)
2598 2600 if stopped:
2599 2601 basetext = self._revisioncache[2]
2600 2602
General Comments 0
You need to be logged in to leave comments. Login now