Rev 2805: Generate the revision_index_map for packing during the core operation, from the pack objects. in http://people.ubuntu.com/~robertc/baz2.0/repository
Robert Collins
robertc at robertcollins.net
Wed Oct 10 09:06:19 BST 2007
At http://people.ubuntu.com/~robertc/baz2.0/repository
------------------------------------------------------------
revno: 2805
revision-id: robertc at robertcollins.net-20071010080610-8yhs1je76gsccaw8
parent: robertc at robertcollins.net-20071010073131-8iiuanh7s960lyim
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Wed 2007-10-10 18:06:10 +1000
message:
Generate the revision_index_map for packing during the core operation, from the pack objects.
modified:
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/repository.py rev_storage.py-20051111201905-119e9401e46257e3
bzrlib/tests/test_repository.py test_repository.py-20060131075918-65c555b881612f4d
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2007-10-10 07:31:31 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2007-10-10 08:06:10 +0000
@@ -114,6 +114,10 @@
return "<bzrlib.repofmt.pack_repo.Pack object at 0x%x, %s, %s" % (
id(self), self.transport, self.name)
+ def file_name(self):
+ """Get the file name for the pack on disk."""
+ return self.name + '.pack'
+
def get_revision_count(self):
return self.revision_index.key_count()
@@ -263,7 +267,7 @@
self._execute_pack_operations(pack_operations)
return True
- def create_pack_from_packs(self, packs, revision_index_map,
+ def create_pack_from_packs(self, packs,
inventory_index_map, text_index_map, signature_index_map, suffix,
revision_ids=None):
"""Create a new pack by reading data from other packs.
@@ -275,7 +279,6 @@
source packs are not altered.
:param packs: An iterable of Packs to combine.
- :param revision_index_map: A revision index map.
:param inventory_index_map: A inventory index map.
:param text_index_map: A text index map.
:param signature_index_map: A signature index map.
@@ -296,8 +299,8 @@
return None
random_name = self.repo.control_files._lock.nonce + suffix
if 'fetch' in debug.debug_flags:
- plain_pack_list = ['%s%s' % (transport.base, name) for
- transport, name in revision_index_map.itervalues()]
+ plain_pack_list = ['%s%s' % (a_pack.transport.base, a_pack.name)
+ for a_pack in packs]
if revision_ids is not None:
rev_count = len(revision_ids)
else:
@@ -333,6 +336,10 @@
revision_keys = [(revision_id,) for revision_id in revision_ids]
else:
revision_keys = None
+
+ # select revision keys
+ revision_index_map = self._packs_list_to_pack_map_and_index_list(
+ packs, 'revision_index')[0]
revision_nodes = self._index_contents(revision_index_map, revision_keys)
# copy revision keys and adjust values
list(self._copy_nodes_graph(revision_nodes, revision_index_map, writer,
@@ -585,15 +592,13 @@
in use.
:return: None
"""
- # select revision keys
- revision_index_map = self._revision_index_map(pack_details, packs)
# select inventory keys
inv_index_map = self._inv_index_map(pack_details)
# select text keys
text_index_map = self._text_index_map(pack_details)
# select signature keys
signature_index_map = self._signature_index_map(pack_details)
- self.create_pack_from_packs(packs, revision_index_map, inv_index_map,
+ self.create_pack_from_packs(packs, inv_index_map,
text_index_map, signature_index_map, '.autopack')
def _copy_nodes(self, nodes, index_map, writer, write_index):
@@ -842,14 +847,28 @@
pack_map[new_index] = (transport, name)
return pack_map, indices
+ def _packs_list_to_pack_map_and_index_list(self, packs, index_attribute):
+ """Convert a list of packs to an index pack map and index list.
+
+ :param packs: The packs list to process.
+ :param index_attribute: The attribute that the desired index is found
+ on.
+ :return: A tuple (map, list) where map contains the dict from
+ index:pack_tuple, and lsit contains the indices in the same order
+ as the packs list.
+ """
+ indices = []
+ pack_map = {}
+ for pack in packs:
+ index = getattr(pack, index_attribute)
+ indices.append(index)
+ pack_map[index] = (pack.transport, pack.file_name())
+ return pack_map, indices
+
def _inv_index_map(self, pack_details):
"""Get a map of inv index -> packs for pack_details."""
return self._make_index_to_pack_map(pack_details, '.iix')[0]
- def _revision_index_map(self, pack_details, packs):
- """Get a map of revision index -> packs for pack_details."""
- return self._make_index_to_pack_map(pack_details, '.rix')[0]
-
def _signature_index_map(self, pack_details):
"""Get a map of signature index -> packs for pack_details."""
return self._make_index_to_pack_map(pack_details, '.six')[0]
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py 2007-10-10 07:31:31 +0000
+++ b/bzrlib/repository.py 2007-10-10 08:06:10 +0000
@@ -2344,13 +2344,11 @@
raise errors.InstallFailed([revision_id])
packs = self.source._packs.all_pack_details()
_packs = self.source._packs.all_packs()
- revision_index_map = self.source._packs._revision_index_map(packs, _packs)
inventory_index_map = self.source._packs._inv_index_map(packs)
text_index_map = self.source._packs._text_index_map(packs)
signature_index_map = self.source._packs._signature_index_map(packs)
pack = self.target._packs.create_pack_from_packs(
_packs,
- revision_index_map,
inventory_index_map,
text_index_map,
signature_index_map,
=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py 2007-10-10 06:46:36 +0000
+++ b/bzrlib/tests/test_repository.py 2007-10-10 08:06:10 +0000
@@ -1001,3 +1001,7 @@
self.assertCurrentlyNotEqual(left, right)
right.transport = 'a'
self.assertCurrentlyEqual(left, right)
+
+ def test_file_name(self):
+ pack = pack_repo.Pack('', 'a_name', '', '', '', '')
+ self.assertEqual('a_name.pack', pack.file_name())
More information about the bazaar-commits
mailing list