Rev 2642: Implement KnitGraphIndex.check_versions_present. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Fri Jul 13 21:36:07 BST 2007


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

------------------------------------------------------------
revno: 2642
revision-id: robertc at robertcollins.net-20070713203605-i1tiuy07vb29oa3y
parent: robertc at robertcollins.net-20070713203033-mcdbqbg809n5mqzm
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Sat 2007-07-14 06:36:05 +1000
message:
  Implement KnitGraphIndex.check_versions_present.
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	2007-07-13 20:30:33 +0000
+++ b/bzrlib/knit.py	2007-07-13 20:36:05 +0000
@@ -1434,14 +1434,25 @@
     def get_parents(self, version_id):
         """Return parents of specified version ignoring ghosts."""
         parents = self.get_parents_with_ghosts(version_id)
-        present_parents = set([
-            parent[0] for parent in self._graph_index.iter_entries(parents)])
+        present_parents = self._present_keys(parents)
         return [key for key in parents if key in present_parents]
 
+    def _present_keys(self, version_ids):
+        return set([
+            node[0] for node in self._graph_index.iter_entries(version_ids)])
+
     def get_parents_with_ghosts(self, version_id):
         """Return parents of specified version with ghosts."""
         return self._get_node(version_id)[1][0]
 
+    def check_versions_present(self, version_ids):
+        """Check that all specified versions are present."""
+        version_ids = set(version_ids)
+        present = self._present_keys(version_ids)
+        missing = version_ids.difference(present)
+        if missing:
+            raise RevisionNotPresent(missing.pop, self)
+
 
 class _KnitData(_KnitComponentFile):
     """Contents of the knit data file"""

=== modified file 'bzrlib/tests/test_knit.py'
--- a/bzrlib/tests/test_knit.py	2007-07-13 20:30:33 +0000
+++ b/bzrlib/tests/test_knit.py	2007-07-13 20:36:05 +0000
@@ -1662,6 +1662,14 @@
         index = self.two_graph_index()
         self.assertEqual(('tail', 'ghost'), index.get_parents_with_ghosts('parent'))
 
+    def test_check_versions_present(self):
+        # ghosts should not be considered present
+        index = self.two_graph_index()
+        self.assertRaises(RevisionNotPresent, index.check_versions_present,
+            ['ghost'])
+        self.assertRaises(RevisionNotPresent, index.check_versions_present,
+            ['tail', 'ghost'])
+        index.check_versions_present(['tail', 'separate'])
 
 ## --- mutating tests for later ---
 #




More information about the bazaar-commits mailing list