46c042e1e159 — Andrew Shu 13 years ago
branchtags caching for speedup in repos with many branches
1 files changed, 10 insertions(+), 1 deletions(-)

M compass.py
M compass.py +10 -1
@@ 75,6 75,8 @@ class RepoInfo(object):
         self.repo = repo
         self.out_closed = not opts["hide_closed"]
         self.out_inactive = not opts["hide_inactive"]
+        self.branchtags_cached = None
+        self.branchtags_repo = None
         
         # all head revisions
         self.head_revs = _csi2rev(repo, repo.heads())

          
@@ 141,6 143,13 @@ class RepoInfo(object):
         
         return tags, bm
 
+    def branchtags(self):
+        """Get branch tags of the repo, using cache if available."""
+        if self.repo != self.branchtags_repo:
+            self.branchtags_cached = self.repo.branchtags()
+            self.branchtags_repo = self.repo
+        return self.branchtags_cached
+
 class BranchInfo(object):
     """Various information about a branch."""
     

          
@@ 148,7 157,7 @@ class BranchInfo(object):
         
         self.name = name
         
-        self.tip_rev = _csi2rev(ri.repo, ri.repo.branchtags()[name])
+        self.tip_rev = _csi2rev(ri.repo, ri.branchtags()[name])
         self.head_revs = bh_revs
         self.head_revs_bm = [x for x in self.head_revs if x in ri.bm_revs]
         self.head_revs_active = [x for x in self.head_revs if x in ri.head_revs]