diff mercurial/phases.py @ 18101:a464deecc9dd

clfilter: add a cache on repo for set of revision to filter for a given set. Recomputing the filtered revisions at every access to changelog is far too expensive. This changeset introduce a cache for this information. This cache is hold by the repository (unfiltered repository) and invalidated when necessary. This cache is not a protected attribute (leading _) because some logic that invalidate it is not held by the local repo itself.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Thu, 20 Dec 2012 17:14:07 +0100
parents 9bc5873e52af
children 312262ebc223
line wrap: on
line diff
--- a/mercurial/phases.py	Thu Dec 20 15:32:42 2012 +0100
+++ b/mercurial/phases.py	Thu Dec 20 17:14:07 2012 +0100
@@ -249,6 +249,7 @@
             if targetphase != 0:
                 self.retractboundary(repo, targetphase, delroots)
         obsolete.clearobscaches(repo)
+        repo.filteredrevcache.clear()
 
     def retractboundary(self, repo, targetphase, nodes):
         # Be careful to preserve shallow-copied values: do not update
@@ -267,6 +268,7 @@
             currentroots.intersection_update(ctx.node() for ctx in ctxs)
             self._updateroots(targetphase, currentroots)
         obsolete.clearobscaches(repo)
+        repo.filteredrevcache.clear()
 
 def advanceboundary(repo, targetphase, nodes):
     """Add nodes to a phase changing other nodes phases if necessary.