Rev 3293: Remove _KnitIndex.get_parents. in http://people.ubuntu.com/~robertc/baz2.0/versioned_files

Robert Collins robertc at robertcollins.net
Thu Mar 20 01:31:09 GMT 2008


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

------------------------------------------------------------
revno: 3293
revision-id:robertc at robertcollins.net-20080320013104-3wg168d1kqn9v10n
parent: robertc at robertcollins.net-20080320004325-ee5fzf6ax6cmjgfx
committer: Robert Collins <robertc at robertcollins.net>
branch nick: versionedfile.apicleanup
timestamp: Thu 2008-03-20 12:31:04 +1100
message:
  Remove _KnitIndex.get_parents.
modified:
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
  bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2008-03-20 00:43:25 +0000
+++ b/bzrlib/knit.py	2008-03-20 01:31:04 +0000
@@ -575,7 +575,7 @@
                 fulltext_size = size
                 break
             delta_size += size
-            delta_parents = self._index.get_parents(parent)
+            delta_parents = self._index.get_parent_map([parent])[parent]
         else:
             # We couldn't find a fulltext, so we must create a new one
             return False
@@ -1516,11 +1516,18 @@
             The order is undefined, allowing for different optimisations in
             the underlying implementation.
         """
-        for version_id in version_ids:
-            try:
-                yield version_id, tuple(self.get_parents(version_id))
-            except KeyError:
-                pass
+        parent_map = self.get_parent_map(version_ids)
+        parent_map_set = set(parent_map)
+        unknown_existence = set()
+        for parents in parent_map.itervalues():
+            unknown_existence.update(parents)
+        unknown_existence.difference_update(parent_map_set)
+        present_parents = set(self.get_parent_map(unknown_existence))
+        present_parents.update(parent_map_set)
+        for version_id, parents in parent_map.iteritems():
+            parents = tuple(parent for parent in parents
+                if parent in present_parents)
+            yield version_id, parents
 
     def num_versions(self):
         return len(self._history)
@@ -1634,11 +1641,6 @@
                 pass
         return result
 
-    def get_parents(self, version_id):
-        """Return parents of specified version ignoring ghosts."""
-        return [parent for parent in self._cache[version_id][4] 
-                if parent in self._cache]
-
     def get_parents_with_ghosts(self, version_id):
         """Return parents of specified version with ghosts."""
         try:
@@ -1947,14 +1949,6 @@
                 result[node[1][0]] = ()
         return result
 
-    def get_parents(self, version_id):
-        """Return parents of specified version ignoring ghosts."""
-        parents = list(self.iter_parents([version_id]))
-        if not parents:
-            # missing key
-            raise errors.RevisionNotPresent(version_id, self)
-        return parents[0][1]
-
     def get_parents_with_ghosts(self, version_id):
         """Return parents of specified version with ghosts."""
         try:

=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py	2008-03-20 00:43:25 +0000
+++ b/bzrlib/tests/test_knit.py	2008-03-20 01:31:04 +0000
@@ -599,8 +599,8 @@
             "c option 0 1 1 0 :",
             ])
         index = self.get_knit_index(transport, "filename", "r")
-        self.assertEqual(["a"], index.get_parents("b"))
-        self.assertEqual(["b", "a"], index.get_parents("c"))
+        self.assertEqual({"b":("a",), "c":("b", "a")},
+            index.get_parent_map(["b", "c"]))
 
     def test_write_utf8_version_id(self):
         unicode_revision_id = u"version-\N{CYRILLIC CAPITAL LETTER A}"
@@ -902,7 +902,7 @@
         self.assertEqual(["opt1"], index.get_options("a"))
         self.assertEqual(["opt2", "opt3"], index.get_options("b"))
 
-    def test_get_parents(self):
+    def test_get_parent_map(self):
         transport = MockTransport([
             _KnitIndex.HEADER,
             "a option 0 1 :",
@@ -911,9 +911,11 @@
             ])
         index = self.get_knit_index(transport, "filename", "r")
 
-        self.assertEqual([], index.get_parents("a"))
-        self.assertEqual(["a", "c"], index.get_parents("b"))
-        self.assertEqual(["b", "a"], index.get_parents("c"))
+        self.assertEqual({
+            "a":(),
+            "b":("a", "c"),
+            "c":("b", "a", "e"),
+            }, index.get_parent_map(["a", "b", "c"]))
 
     def test_get_parents_with_ghosts(self):
         transport = MockTransport([



More information about the bazaar-commits mailing list