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