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