Rev 4642: Teach VF.get_known_graph_ancestry to go to fallbacks (bug #419241) in http://bazaar.launchpad.net/~jameinel/bzr/2.0rc2-419241-merge-sort
John Arbash Meinel
john at arbash-meinel.com
Wed Aug 26 17:44:33 BST 2009
At http://bazaar.launchpad.net/~jameinel/bzr/2.0rc2-419241-merge-sort
------------------------------------------------------------
revno: 4642
revision-id: john at arbash-meinel.com-20090826164427-lrly8srccu1327oh
parent: john at arbash-meinel.com-20090826160359-ge4mai928bi3a5g2
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: 2.0rc2-419241-merge-sort
timestamp: Wed 2009-08-26 11:44:27 -0500
message:
Teach VF.get_known_graph_ancestry to go to fallbacks (bug #419241)
-------------- next part --------------
=== modified file 'bzrlib/groupcompress.py'
--- a/bzrlib/groupcompress.py 2009-08-26 09:14:13 +0000
+++ b/bzrlib/groupcompress.py 2009-08-26 16:44:27 +0000
@@ -1210,8 +1210,18 @@
def get_known_graph_ancestry(self, keys):
"""Get a KnownGraph instance with the ancestry of keys."""
+ # Note that this is identical to
+ # KnitVersionedFiles.get_known_graph_ancestry, but they don't share
+ # ancestry.
parent_map, missing_keys = self._index._graph_index.find_ancestry(keys,
- 0)
+ 0)
+ for fallback in self._fallback_vfs:
+ if not missing_keys:
+ break
+ (f_parent_map, f_missing_keys) = fallback._index._graph_index.find_ancestry(
+ missing_keys, 0)
+ parent_map.update(f_parent_map)
+ missing_keys = f_missing_keys
kg = _mod_graph.KnownGraph(parent_map)
return kg
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2009-08-17 22:08:21 +0000
+++ b/bzrlib/knit.py 2009-08-26 16:44:27 +0000
@@ -1193,6 +1193,13 @@
def get_known_graph_ancestry(self, keys):
"""Get a KnownGraph instance with the ancestry of keys."""
parent_map, missing_keys = self._index.find_ancestry(keys)
+ for fallback in self._fallback_vfs:
+ if not missing_keys:
+ break
+ (f_parent_map, f_missing_keys) = fallback._index.find_ancestry(
+ missing_keys)
+ parent_map.update(f_parent_map)
+ missing_keys = f_missing_keys
kg = _mod_graph.KnownGraph(parent_map)
return kg
=== modified file 'bzrlib/tests/per_versionedfile.py'
--- a/bzrlib/tests/per_versionedfile.py 2009-08-17 22:08:21 +0000
+++ b/bzrlib/tests/per_versionedfile.py 2009-08-26 16:44:27 +0000
@@ -1757,6 +1757,29 @@
self.assertIsInstance(kg, _mod_graph.KnownGraph)
self.assertEqual([key_a, key_b, key_c], list(kg.topo_sort()))
+ def test_known_graph_with_fallbacks(self):
+ f = self.get_versionedfiles('files')
+ if not self.graph:
+ raise TestNotApplicable('ancestry info only relevant with graph.')
+ if getattr(f, 'add_fallback_versioned_files', None) is None:
+ raise TestNotApplicable("%s doesn't support fallbacks"
+ % (f.__class__.__name__,))
+ key_a = self.get_simple_key('a')
+ key_b = self.get_simple_key('b')
+ key_c = self.get_simple_key('c')
+ # A only in fallback
+ # |\
+ # | B
+ # |/
+ # C
+ g = self.get_versionedfiles('fallback')
+ g.add_lines(key_a, [], ['\n'])
+ f.add_fallback_versioned_files(g)
+ f.add_lines(key_b, [key_a], ['\n'])
+ f.add_lines(key_c, [key_a, key_b], ['\n'])
+ kg = f.get_known_graph_ancestry([key_c])
+ self.assertEqual([key_a, key_b, key_c], list(kg.topo_sort()))
+
def test_get_record_stream_empty(self):
"""An empty stream can be requested without error."""
f = self.get_versionedfiles()
More information about the bazaar-commits
mailing list