Rev 2842: Implement get_parents and _make_parents_provider for Pack repositories. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Thu Oct 18 01:31:02 BST 2007


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

------------------------------------------------------------
revno: 2842
revision-id: robertc at robertcollins.net-20071018003057-67sqhzt0l5fh4jg7
parent: robertc at robertcollins.net-20071017204821-sovi7e8mkji4gb0q
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Thu 2007-10-18 10:30:57 +1000
message:
  Implement get_parents and _make_parents_provider for Pack repositories.
modified:
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py	2007-10-17 20:48:21 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-10-18 00:30:57 +0000
@@ -1424,6 +1424,36 @@
             return 'w'
         return 'r'
 
+    def get_parents(self, revision_ids):
+        """See StackedParentsProvider.get_parents.
+        
+        This implementation accesses the combined revision index to provide
+        answers.
+        """
+        index = self._packs.revision_index.combined_index
+        search_keys = set()
+        for revision_id in revision_ids:
+            if revision_id != _mod_revision.NULL_REVISION:
+                search_keys.add((revision_id,))
+        found_parents = {_mod_revision.NULL_REVISION:[]}
+        for index, key, value, refs in index.iter_entries(search_keys):
+            parents = refs[0]
+            if not parents:
+                parents = (_mod_revision.NULL_REVISION,)
+            else:
+                parents = tuple(parent[0] for parent in parents)
+            found_parents[key[0]] = parents
+        result = []
+        for revision_id in revision_ids:
+            try:
+                result.append(found_parents[revision_id])
+            except KeyError:
+                result.append(None)
+        return result
+
+    def _make_parents_provider(self):
+        return self
+
     def _refresh_data(self):
         if self._write_lock_count == 1 or self.control_files._lock_count==1:
             # forget what names there are



More information about the bazaar-commits mailing list