Rev 2803: Make all parameters to Pack objects mandatory. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Wed Oct 10 07:46:44 BST 2007


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

------------------------------------------------------------
revno: 2803
revision-id: robertc at robertcollins.net-20071010064636-gepsfmu4dkpfyodk
parent: robertc at robertcollins.net-20071010054802-raogpryl9kq6t7ea
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Wed 2007-10-10 16:46:36 +1000
message:
  Make all parameters to Pack objects mandatory.
modified:
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
  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 05:48:02 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-10-10 06:46:36 +0000
@@ -93,14 +93,16 @@
 class Pack(object):
     """An in memory proxy for a .pack and its indices."""
 
-    def __init__(self, transport=None, name=None, revision_index=None,
-        inventory_index=None, text_index=None, signature_index=None):
+    def __init__(self, transport, name, revision_index, inventory_index,
+        text_index, signature_index):
         self.revision_index = revision_index
         self.inventory_index = inventory_index
         self.text_index = text_index
         self.signature_index = signature_index
         self.name = name
         self.transport = transport
+        assert None not in (revision_index, inventory_index, text_index,
+            signature_index, name, transport)
 
     def __eq__(self, other):
         return self.__dict__ == other.__dict__
@@ -419,9 +421,6 @@
             )):
             self._upload_transport.delete(random_name)
             return None
-        result = Pack()
-        result.name = new_name
-        result.transport = self._upload_transport.clone('../packs/')
         # write indices
         index_transport = self._index_transport
         rev_index_name = self.repo._revision_store.name_to_revision_index_name(new_name)
@@ -463,16 +462,14 @@
         # uploading blind under the chosen name.
         write_stream.close()
         self._upload_transport.rename(random_name, '../packs/' + new_name + '.pack')
+        result = Pack(self._upload_transport.clone('../packs/'), new_name,
+            revision_index, inv_index, text_index, signature_index)
         if 'fetch' in debug.debug_flags:
             # XXX: size might be interesting?
             mutter('%s: create_pack: pack renamed into place: %s%s->%s%s t+%6.3fs',
                 time.ctime(), self._upload_transport.base, random_name,
                 result.transport, result.name,
                 time.time() - start_time)
-        result.revision_index = revision_index
-        result.inventory_index = inv_index
-        result.text_index = text_index
-        result.signature_index = signature_index
         if 'fetch' in debug.debug_flags:
             # XXX: size might be interesting?
             mutter('%s: create_pack: finished: %s%s t+%6.3fs',
@@ -921,17 +918,15 @@
         if data_inserted:
             self._open_pack_writer.end()
             new_name = self._open_pack_hash.hexdigest()
-            new_pack = Pack()
-            new_pack.name = new_name
-            new_pack.transport = self._upload_transport.clone('../packs/')
-            # To populate:
-            # new_pack.revision_index = 
-            # new_pack.inventory_index = 
-            # new_pack.text_index = 
-            # new_pack.signature_index = 
-            self.repo.weave_store.flush(new_name, new_pack)
-            self.repo._inv_thunk.flush(new_name, new_pack)
-            self.repo._revision_store.flush(new_name, new_pack)
+            txt_index, text_index_length = self.repo.weave_store.flush(
+                new_name)
+            inv_index, inventory_index_length = \
+                self.repo._inv_thunk.flush(new_name)
+            rev_index, revision_index_length, \
+                sig_index, signature_index_length = \
+                self.repo._revision_store.flush(new_name)
+            new_pack = Pack(self._upload_transport.clone('../packs/'),
+                new_name, rev_index, inv_index, txt_index, sig_index)
             self._write_stream.close()
             self._upload_transport.rename(self.repo._open_pack_tuple[1],
                 '../packs/' + new_name + '.pack')
@@ -941,9 +936,9 @@
             # - the existing name is not the actual hash - e.g.
             #   its a deliberate attack or data corruption has
             #   occuring during the write of that file.
-            self.allocate(new_name, new_pack.revision_index_length,
-                new_pack.inventory_index_length, new_pack.text_index_length,
-                new_pack.signature_index_length)
+            self.allocate(new_name, revision_index_length,
+                inventory_index_length, text_index_length,
+                signature_index_length)
             self.repo._open_pack_tuple = None
             if not self.autopack():
                 self._save_pack_names()
@@ -1050,12 +1045,14 @@
             return True
         return False
 
-    def flush(self, new_name, new_pack):
+    def flush(self, new_name):
         """Write out pending indices."""
         # write a revision index (might be empty)
         new_index_name = self.name_to_revision_index_name(new_name)
-        new_pack.revision_index_length = self.transport.put_file(
+        revision_index_length = self.transport.put_file(
             new_index_name, self.repo._revision_write_index.finish())
+        rev_index = GraphIndex(self.transport, new_index_name,
+                revision_index_length)
         if self.repo._revision_all_indices is None:
             # create a pack map for the autopack code - XXX finish
             # making a clear managed list of packs, indices and use
@@ -1064,11 +1061,9 @@
         else:
             del self.repo._revision_pack_map[self.repo._revision_write_index]
             self.repo._revision_write_index = None
-            new_index = GraphIndex(self.transport, new_index_name,
-                new_pack.revision_index_length)
-            self.repo._revision_pack_map[new_index] = (self.repo._packs._pack_tuple(new_name))
+            self.repo._revision_pack_map[rev_index] = (self.repo._packs._pack_tuple(new_name))
             # revisions 'knit' accessed : update it.
-            self.repo._revision_all_indices.insert_index(0, new_index)
+            self.repo._revision_all_indices.insert_index(0, rev_index)
             # remove the write buffering index. XXX: API break
             # - clearly we need a remove_index call too.
             del self.repo._revision_all_indices._indices[1]
@@ -1077,19 +1072,21 @@
 
         # write a signatures index (might be empty)
         new_index_name = self.name_to_signature_index_name(new_name)
-        new_pack.signature_index_length = self.transport.put_file(
+        signature_index_length = self.transport.put_file(
             new_index_name, self.repo._signature_write_index.finish())
         self.repo._signature_write_index = None
+        sig_index = GraphIndex(self.transport, new_index_name,
+            signature_index_length)
         if self.repo._signature_all_indices is not None:
             # sigatures 'knit' accessed : update it.
-            self.repo._signature_all_indices.insert_index(0,
-                GraphIndex(self.transport, new_index_name,
-                    new_pack.signature_index_length))
+            self.repo._signature_all_indices.insert_index(0, sig_index)
             # remove the write buffering index. XXX: API break
             # - clearly we need a remove_index call too.
             del self.repo._signature_all_indices._indices[1]
             # reset the knit access writer
             self.repo._signature_knit_access.set_writer(None, None, (None, None))
+        return (rev_index, revision_index_length, sig_index,
+            signature_index_length)
 
     def name_to_revision_index_name(self, name):
         """The revision index is the name + .rix."""
@@ -1182,24 +1179,25 @@
         self._setup_knit(self.repo.is_in_write_group())
         self.repo._text_all_indices = CombinedGraphIndex(indices)
 
-    def flush(self, new_name, new_pack):
+    def flush(self, new_name):
         """Write the index out to new_name."""
         # write a revision index (might be empty)
         new_index_name = self.name_to_text_index_name(new_name)
-        new_pack.text_index_length = self.transport.put_file(
+        text_index_length = self.transport.put_file(
             new_index_name, self.repo._text_write_index.finish())
+        txt_index = GraphIndex(self.transport, new_index_name,
+            text_index_length)
         self.repo._text_write_index = None
         self._setup_knit(False)
         if self.repo._text_all_indices is not None:
             # text 'knits' have been used, replace the mutated memory index
             # with the new on-disk one. XXX: is this really a good idea?
             # perhaps just keep using the memory one ?
-            self.repo._text_all_indices.insert_index(0,
-                GraphIndex(self.transport, new_index_name,
-                    new_pack.text_index_length))
+            self.repo._text_all_indices.insert_index(0, txt_index)
             # remove the write buffering index. XXX: API break
             # - clearly we need a remove_index call too.
             del self.repo._text_all_indices._indices[1]
+        return txt_index, text_index_length
 
     def get_weave_or_empty(self, file_id, transaction, force_write=False):
         """Get a 'Knit' backed by the .tix indices.
@@ -1309,25 +1307,26 @@
         self.repo._inv_all_indices = CombinedGraphIndex(indices)
         self.repo._inv_pack_map = pack_map
 
-    def flush(self, new_name, new_pack):
+    def flush(self, new_name):
         """Write the index out to new_name."""
         # write an index (might be empty)
         new_index_name = self.name_to_inv_index_name(new_name)
-        new_pack.inventory_index_length = self.transport.put_file(
+        inventory_index_length = self.transport.put_file(
             new_index_name, self.repo._inv_write_index.finish())
         self.repo._inv_write_index = None
+        inv_index = GraphIndex(self.transport, new_index_name,
+            inventory_index_length)
         if self.repo._inv_all_indices is not None:
             # inv 'knit' has been used, replace the mutated memory index
             # with the new on-disk one. XXX: is this really a good idea?
             # perhaps just keep using the memory one ?
-            self.repo._inv_all_indices.insert_index(0,
-                GraphIndex(self.transport, new_index_name,
-                    new_pack.inventory_index_length))
+            self.repo._inv_all_indices.insert_index(0, inv_index)
             # remove the write buffering index. XXX: API break
             # - clearly we need a remove_index call too.
             del self.repo._inv_all_indices._indices[1]
             self.repo._inv_knit_access.set_writer(None, None, (None, None))
         self.repo._inv_pack_map = None
+        return inv_index, inventory_index_length
 
     def get_weave(self):
         """Get a 'Knit' that contains inventory data."""

=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py	2007-10-10 05:48:02 +0000
+++ b/bzrlib/tests/test_repository.py	2007-10-10 06:46:36 +0000
@@ -973,8 +973,8 @@
         self.assertTrue(right != left)
 
     def test___eq____ne__(self):
-        left = pack_repo.Pack()
-        right = pack_repo.Pack()
+        left = pack_repo.Pack('', '', '', '', '', '')
+        right = pack_repo.Pack('', '', '', '', '', '')
         self.assertCurrentlyEqual(left, right)
         # change all attributes and ensure equality changes as we do.
         left.revision_index = 'a'



More information about the bazaar-commits mailing list