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