changeset 3259:b63d03db0ab9

stablerange: introduce an intermediary abstract class for caching The 'branchpoint' and 'mergepoint' based stablerange class will need similar cache, we introduce an abstract class to take care of that first.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 10 Dec 2017 01:26:40 +0100
parents af1f8f0687e1
children 2f0c113b35f8
files hgext3rd/evolve/stablerange.py
diffstat 1 files changed, 16 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/hgext3rd/evolve/stablerange.py	Sun Dec 10 01:06:16 2017 +0100
+++ b/hgext3rd/evolve/stablerange.py	Sun Dec 10 01:26:40 2017 +0100
@@ -183,10 +183,10 @@
         """warmup the stable range cache"""
         raise NotImplemented()
 
+    @abc.abstractmethod
     def rangelength(self, repo, rangeid):
         """number of revision in <range>"""
-        headrev, index = rangeid[0], rangeid[1]
-        return self.depthrev(repo, headrev) - index
+        raise NotImplemented()
 
     def _slicepoint(self, repo, rangeid):
         """find the standard slicing point for a range"""
@@ -292,7 +292,20 @@
     def _sortfunction(self, repo, headrev):
         return stablesort.stablesort_mergepoint_head_basic(repo, [headrev])
 
-class stablerange(abstractstablerange):
+class stablerangecached(abstractstablerange):
+    """an implementation of stablerange using caching"""
+
+    __metaclass__ = abc.ABCMeta
+
+    def depthrev(self, repo, rev):
+        return repo.depthcache.get(rev)
+
+    def rangelength(self, repo, rangeid):
+        """number of revision in <range>"""
+        headrev, index = rangeid[0], rangeid[1]
+        return self.depthrev(repo, headrev) - index
+
+class stablerange(stablerangecached):
 
     def __init__(self, lrusize=2000):
         # The point up to which we have data in cache
@@ -387,9 +400,6 @@
         repo.ui.log('evoext-cache', 'updated stablerange cache in %.4f seconds\n',
                     duration)
 
-    def depthrev(self, repo, rev):
-        return repo.depthcache.get(rev)
-
     def subranges(self, repo, rangeid):
         cached = self._getsub(rangeid)
         if cached is not None: