Rev 4336: Add a graph API for getting multiple distances to NULL at once. in http://people.ubuntu.com/~robertc/baz2.0/check

Robert Collins robertc at robertcollins.net
Fri May 8 07:23:06 BST 2009


At http://people.ubuntu.com/~robertc/baz2.0/check

------------------------------------------------------------
revno: 4336
revision-id: robertc at robertcollins.net-20090508062301-yu577nacsdcp2u9p
parent: robertc at robertcollins.net-20090508051018-dw9xgkfd35wn7m9x
committer: Robert Collins <robertc at robertcollins.net>
branch nick: check
timestamp: Fri 2009-05-08 16:23:01 +1000
message:
  Add a graph API for getting multiple distances to NULL at once.
=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py	2009-04-04 02:50:01 +0000
+++ b/bzrlib/graph.py	2009-05-08 06:23:01 +0000
@@ -304,6 +304,21 @@
         # get there.
         return known_revnos[cur_tip] + num_steps
 
+    def find_lefthand_distances(self, keys):
+        """Find the distance to null for all the keys in keys.
+
+        :param keys: keys to lookup.
+        :return: A dict key->distance for all of keys.
+        """
+        # Optimisable by concurrent searching, but a random spread should get
+        # some sort of hit rate.
+        result = {}
+        known_revnos = []
+        for key in keys:
+            known_revnos.append(
+                (key, self.find_distance_to_null(key, known_revnos)))
+        return dict(known_revnos)
+
     def find_unique_ancestors(self, unique_revision, common_revisions):
         """Find the unique ancestors for a revision versus others.
 

=== modified file 'bzrlib/tests/test_graph.py'
--- a/bzrlib/tests/test_graph.py	2009-03-24 23:19:12 +0000
+++ b/bzrlib/tests/test_graph.py	2009-05-08 06:23:01 +0000
@@ -525,6 +525,12 @@
         graph = self.make_graph(history_shortcut)
         self.assertEqual(set(['rev2b']), graph.find_lca('rev3a', 'rev3b'))
 
+    def test_lefthand_distance_smoke(self):
+        """A simple does it work test for graph.lefthand_distance(keys)."""
+        graph = self.make_graph(history_shortcut)
+        distance_graph = graph.find_lefthand_distances(['rev3b', 'rev2a'])
+        self.assertEqual({'rev2a': 2, 'rev3b': 3}, distance_graph)
+
     def test_recursive_unique_lca(self):
         """Test finding a unique least common ancestor.
 




More information about the bazaar-commits mailing list