Rev 2962: Factor out revision text copying in Packer to a single helper method. in http://people.ubuntu.com/~robertc/baz2.0/reconcile
Robert Collins
robertc at robertcollins.net
Sun Nov 4 20:42:03 GMT 2007
At http://people.ubuntu.com/~robertc/baz2.0/reconcile
------------------------------------------------------------
revno: 2962
revision-id:robertc at robertcollins.net-20071104204151-amehfv5prpvhn92c
parent: robertc at robertcollins.net-20071104203532-6vndyb5pv82em6n7
committer: Robert Collins <robertc at robertcollins.net>
branch nick: reconcile
timestamp: Mon 2007-11-05 07:41:51 +1100
message:
Factor out revision text copying in Packer to a single helper method.
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-11-04 20:35:32 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2007-11-04 20:41:51 +0000
@@ -490,7 +490,12 @@
self.packs = packs
self.suffix = suffix
self.revision_ids = revision_ids
+ # The pack object we are creating.
+ self.new_pack = None
self._pack_collection = pack_collection
+ # The index layer keys for the revisions being copied. None for 'all
+ # objects'.
+ self._revision_keys = None
def pack(self, pb=None):
"""Create a new pack by reading data from other packs.
@@ -535,9 +540,33 @@
self._pack_collection._index_transport,
self._pack_collection._pack_transport, upload_suffix=self.suffix)
+ def _copy_revision_texts(self):
+ """Copy revision data to the new pack."""
+ # select revisions
+ if self.revision_ids:
+ revision_keys = [(revision_id,) for revision_id in self.revision_ids]
+ else:
+ revision_keys = None
+ # select revision keys
+ revision_index_map = self._pack_collection._packs_list_to_pack_map_and_index_list(
+ self.packs, 'revision_index')[0]
+ revision_nodes = self._pack_collection._index_contents(revision_index_map, revision_keys)
+ # copy revision keys and adjust values
+ self.pb.update("Copying revision texts", 1)
+ list(self._copy_nodes_graph(revision_nodes, revision_index_map,
+ self.new_pack._writer, self.new_pack.revision_index))
+ if 'pack' in debug.debug_flags:
+ mutter('%s: create_pack: revisions copied: %s%s %d items t+%6.3fs',
+ time.ctime(), self._pack_collection._upload_transport.base,
+ self.new_pack.random_name,
+ self.new_pack.revision_index.key_count(),
+ time.time() - self.new_pack.start_time)
+ self._revision_keys = revision_keys
+
def _create_pack_from_packs(self):
self.pb.update("Opening pack", 0, 5)
- new_pack = self.open_pack()
+ self.new_pack = self.open_pack()
+ new_pack = self.new_pack
# buffer data - we won't be reading-back during the pack creation and
# this makes a significant difference on sftp pushes.
new_pack.set_write_cache_size(1024*1024)
@@ -552,27 +581,9 @@
'%s%s %s revisions wanted %s t=0',
time.ctime(), self._pack_collection._upload_transport.base, new_pack.random_name,
plain_pack_list, rev_count)
- # select revisions
- if self.revision_ids:
- revision_keys = [(revision_id,) for revision_id in self.revision_ids]
- else:
- revision_keys = None
-
- # select revision keys
- revision_index_map = self._pack_collection._packs_list_to_pack_map_and_index_list(
- self.packs, 'revision_index')[0]
- revision_nodes = self._pack_collection._index_contents(revision_index_map, revision_keys)
- # copy revision keys and adjust values
- self.pb.update("Copying revision texts", 1)
- list(self._copy_nodes_graph(revision_nodes, revision_index_map,
- new_pack._writer, new_pack.revision_index))
- if 'pack' in debug.debug_flags:
- mutter('%s: create_pack: revisions copied: %s%s %d items t+%6.3fs',
- time.ctime(), self._pack_collection._upload_transport.base, new_pack.random_name,
- new_pack.revision_index.key_count(),
- time.time() - new_pack.start_time)
+ self._copy_revision_texts()
# select inventory keys
- inv_keys = revision_keys # currently the same keyspace, and note that
+ inv_keys = self._revision_keys # currently the same keyspace, and note that
# querying for keys here could introduce a bug where an inventory item
# is missed, so do not change it to query separately without cross
# checking like the text key check below.
@@ -631,7 +642,7 @@
new_pack.text_index.key_count(),
time.time() - new_pack.start_time)
# select signature keys
- signature_filter = revision_keys # same keyspace
+ signature_filter = self._revision_keys # same keyspace
signature_index_map = self._pack_collection._packs_list_to_pack_map_and_index_list(
self.packs, 'signature_index')[0]
signature_nodes = self._pack_collection._index_contents(signature_index_map,
More information about the bazaar-commits
mailing list