[Pkg-bazaar-commits] ./bzr-gtk/unstable r28: optimise by filling caches first

David Allouche david.allouche at canonical.com
Fri Apr 10 07:15:39 UTC 2009


------------------------------------------------------------
revno: 28
committer: David Allouche <david.allouche at canonical.com>
timestamp: Sat 2005-12-03 02:51:28 +0100
message:
  optimise by filling caches first
modified:
  graph.py
-------------- next part --------------
=== modified file 'graph.py'
--- a/graph.py	2005-12-03 01:09:28 +0000
+++ b/graph.py	2005-12-03 01:51:28 +0000
@@ -43,19 +43,22 @@
         self.last_colour = 0
         self.direct_parent_of = {}
 
-    def get_revision(self, revid):
-        """Retrieve a revision from the cache or the branch."""
-        try:
-            revision = self.revisions[revid]
-        except KeyError:
+    def fill_caches(self):
+        branch = self.branch
+        revisions = self.revisions
+        todo = set([self.start])
+        while todo:
+            revid = todo.pop()
             try:
-                revision = self.branch.get_revision(revid)
+                revision = branch.get_revision(revid)
             except NoSuchRevision:
                 revision = DummyRevision(revid)
-            self.set_caches(revid, revision)
-        return revision
+            self.cache_revision(revid, revision)
+            for parent_id in revision.parent_ids:
+                if parent_id not in revisions:
+                    todo.add(parent_id)
 
-    def set_caches(self, revid, revision):
+    def cache_revision(self, revid, revision):
         "Set the caches for a newly retrieved revision."""
         # Build a revision cache
         self.revisions[revid] = revision
@@ -89,9 +92,10 @@
         # we increased the distance. This produces the sort order we desire
         distances = { self.start: 0 }
         todo = set([self.start])
+        revisions = self.revisions
         while todo:
             revid = todo.pop()
-            revision = self.get_revision(revid)
+            revision = revisions[revid]
             distance = distances[revid] + 1
             for parent_id in revision.parent_ids:
                 if parent_id in distances and distances[parent_id] >= distance:
@@ -267,16 +271,16 @@
 
     Returns a tuple of (revids, revisions, colours, children)
     """
-    distance_method = DistanceMethod(branch, start)
-    sorted_revids = distance_method.first_ancestry_traversal()
-    distance_method.remove_redundant_parents(sorted_revids)
-    sorted_revids = \
-        distance_method.sort_revisions_and_set_colours(sorted_revids)
+    distance = DistanceMethod(branch, start)
+    distance.fill_caches()
+    sorted_revids = distance.first_ancestry_traversal()
+    distance.remove_redundant_parents(sorted_revids)
+    sorted_revids = distance.sort_revisions_and_set_colours(sorted_revids)
 
-    revisions = distance_method.revisions
-    colours = distance_method.colours
-    children = distance_method.make_children_map()
-    parent_ids_of = distance_method.parent_ids_of
+    revisions = distance.revisions
+    colours = distance.colours
+    children = distance.make_children_map()
+    parent_ids_of = distance.parent_ids_of
     return (sorted_revids, revisions, colours, children, parent_ids_of)
 
 def graph(revids, revisions, colours, parent_ids):



More information about the Pkg-bazaar-commits mailing list