Rev 2817: Give Pack responsibility for index naming, and two concrete classes - NewPack for new packs and ExistingPack for packs we read from disk. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Mon Oct 15 00:02:31 BST 2007


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

------------------------------------------------------------
revno: 2817
revision-id: robertc at robertcollins.net-20071014230222-cbtbbp49uo4jbtjw
parent: robertc at robertcollins.net-20071014223035-098mbc47ba3y3bi2
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Mon 2007-10-15 09:02:22 +1000
message:
  Give Pack responsibility for index naming, and two concrete classes - NewPack for new packs and ExistingPack for packs we read from disk.
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-14 22:30:35 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-10-14 23:02:22 +0000
@@ -92,10 +92,38 @@
 
 
 class Pack(object):
-    """An in memory proxy for a .pack and its indices."""
+    """An in memory proxy for a pack and its indices.
+
+    This is a base class that is not directly used, instead the classes
+    ExistingPack and NewPack are used.
+    """
+
+    def __init__(self):
+        pass
+
+    def revision_index_name(self, name):
+        """The revision index is the name + .rix."""
+        return name + '.rix'
+
+    def signature_index_name(self, name):
+        """The signature index is the name + .six."""
+        return name + '.six'
+
+    def text_index_name(self, name):
+        """The text index is the name + .tix."""
+        return name + '.tix'
+
+    def inventory_index_name(self, name):
+        """The inv index is the name + .iix."""
+        return name + '.iix'
+
+
+class ExistingPack(Pack):
+    """An in memory proxy for an exisiting .pack and its disk indices."""
 
     def __init__(self, transport, name, revision_index, inventory_index,
         text_index, signature_index):
+        Pack.__init__(self)
         self.revision_index = revision_index
         self.inventory_index = inventory_index
         self.text_index = text_index
@@ -123,6 +151,10 @@
         return self.revision_index.key_count()
 
 
+class NewPack(Pack):
+    """An in memory proxy for a pack which is being created."""
+
+
 class RepositoryPackCollection(object):
     """Management of packs within a repository."""
 
@@ -257,7 +289,7 @@
     def flush_revision_signature_indices(self, new_name):
         """Write out pending indices."""
         # write a revision index (might be empty)
-        new_index_name = self.repo._revision_store.name_to_revision_index_name(new_name)
+        new_index_name = NewPack().revision_index_name(new_name)
         revision_index_length = self._index_transport.put_file(
             new_index_name, self.repo._revision_write_index.finish())
         rev_index = GraphIndex(self._index_transport, new_index_name,
@@ -280,7 +312,7 @@
             self.repo._revision_knit_access.set_writer(None, None, (None, None))
 
         # write a signatures index (might be empty)
-        new_index_name = self.repo._revision_store.name_to_signature_index_name(new_name)
+        new_index_name = NewPack().signature_index_name(new_name)
         signature_index_length = self._index_transport.put_file(
             new_index_name, self.repo._signature_write_index.finish())
         self.repo._signature_write_index = None
@@ -300,7 +332,7 @@
     def flush_inventory_index(self, new_name):
         """Write the index out to new_name."""
         # write an index (might be empty)
-        new_index_name = self.repo._inv_thunk.name_to_inv_index_name(new_name)
+        new_index_name = NewPack().inventory_index_name(new_name)
         inventory_index_length = self._index_transport.put_file(
             new_index_name, self.repo._inv_write_index.finish())
         self.repo._inv_write_index = None
@@ -322,7 +354,7 @@
     def flush_text_index(self, new_name):
         """Write the index out to new_name."""
         # write a revision index (might be empty)
-        new_index_name = self.repo.weave_store.name_to_text_index_name(new_name)
+        new_index_name = NewPack().text_index_name(new_name)
         text_index_length = self._index_transport.put_file(
             new_index_name, self.repo._text_write_index.finish())
         txt_index = GraphIndex(self._index_transport, new_index_name,
@@ -503,8 +535,9 @@
             self._upload_transport.delete(random_name)
             return None
         # write indices
+        new_pack = NewPack()
         index_transport = self._index_transport
-        rev_index_name = self.repo._revision_store.name_to_revision_index_name(new_name)
+        rev_index_name = new_pack.revision_index_name(new_name)
         revision_index_length = index_transport.put_file(rev_index_name,
             revision_index.finish())
         if 'fetch' in debug.debug_flags:
@@ -512,7 +545,7 @@
             mutter('%s: create_pack: wrote revision index: %s%s t+%6.3fs',
                 time.ctime(), self._upload_transport.base, random_name,
                 time.time() - start_time)
-        inv_index_name = self.repo._inv_thunk.name_to_inv_index_name(new_name)
+        inv_index_name = new_pack.inventory_index_name(new_name)
         inventory_index_length = index_transport.put_file(inv_index_name,
             inv_index.finish())
         if 'fetch' in debug.debug_flags:
@@ -520,7 +553,7 @@
             mutter('%s: create_pack: wrote inventory index: %s%s t+%6.3fs',
                 time.ctime(), self._upload_transport.base, random_name,
                 time.time() - start_time)
-        text_index_name = self.repo.weave_store.name_to_text_index_name(new_name)
+        text_index_name = new_pack.text_index_name(new_name)
         text_index_length = index_transport.put_file(text_index_name,
             text_index.finish())
         if 'fetch' in debug.debug_flags:
@@ -528,7 +561,7 @@
             mutter('%s: create_pack: wrote file texts index: %s%s t+%6.3fs',
                 time.ctime(), self._upload_transport.base, random_name,
                 time.time() - start_time)
-        signature_index_name = self.repo._revision_store.name_to_signature_index_name(new_name)
+        signature_index_name = new_pack.signature_index_name(new_name)
         signature_index_length = index_transport.put_file(signature_index_name,
             signature_index.finish())
         if 'fetch' in debug.debug_flags:
@@ -543,7 +576,7 @@
         # 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,
+        result = ExistingPack(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?
@@ -768,8 +801,8 @@
             inv_index = self._make_index(name, '.iix')
             txt_index = self._make_index(name, '.tix')
             sig_index = self._make_index(name, '.six')
-            result = Pack(self._pack_transport, name, rev_index, inv_index,
-                txt_index, sig_index)
+            result = ExistingPack(self._pack_transport, name, rev_index,
+                inv_index, txt_index, sig_index)
             self.add_pack_to_memory(result)
             return result
 
@@ -1054,7 +1087,7 @@
             rev_index, revision_index_length, \
                 sig_index, signature_index_length = \
                 self.flush_revision_signature_indices(new_name)
-            new_pack = Pack(self._upload_transport.clone('../packs/'),
+            new_pack = ExistingPack(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],
@@ -1171,14 +1204,6 @@
             return True
         return False
 
-    def name_to_revision_index_name(self, name):
-        """The revision index is the name + .rix."""
-        return name + '.rix'
-
-    def name_to_signature_index_name(self, name):
-        """The signature index is the name + .six."""
-        return name + '.six'
-
     def setup(self):
         # setup in-memory indices to accumulate data.
         self.repo._revision_write_index = InMemoryGraphIndex(1)
@@ -1283,10 +1308,6 @@
             ids.add(key[0])
         return iter(ids)
 
-    def name_to_text_index_name(self, name):
-        """The text index is the name + .tix."""
-        return name + '.tix'
-
     def setup(self):
         # setup in-memory indices to accumulate data.
         self.repo._text_write_index = InMemoryGraphIndex(reference_lists=2,
@@ -1367,10 +1388,6 @@
             factory=knit.KnitPlainFactory(),
             access_method=knit_access)
 
-    def name_to_inv_index_name(self, name):
-        """The inv index is the name + .iix."""
-        return name + '.iix'
-
     def setup(self):
         # setup in-memory indices to accumulate data.
         # - we want to map compression only, but currently the knit code hasn't

=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py	2007-10-12 05:37:36 +0000
+++ b/bzrlib/tests/test_repository.py	2007-10-14 23:02:22 +0000
@@ -1100,7 +1100,7 @@
             packs._names[name][2])
         sig_index = GraphIndex(packs._index_transport, name + '.six',
             packs._names[name][3])
-        self.assertEqual(pack_repo.Pack(packs._pack_transport,
+        self.assertEqual(pack_repo.ExistingPack(packs._pack_transport,
                 packs.names()[0], rev_index, inv_index, txt_index, sig_index),
             pack_1)
         # and the same instance should be returned on successive calls.
@@ -1123,8 +1123,8 @@
         self.assertTrue(right != left)
 
     def test___eq____ne__(self):
-        left = pack_repo.Pack('', '', '', '', '', '')
-        right = pack_repo.Pack('', '', '', '', '', '')
+        left = pack_repo.ExistingPack('', '', '', '', '', '')
+        right = pack_repo.ExistingPack('', '', '', '', '', '')
         self.assertCurrentlyEqual(left, right)
         # change all attributes and ensure equality changes as we do.
         left.revision_index = 'a'
@@ -1153,5 +1153,5 @@
         self.assertCurrentlyEqual(left, right)
 
     def test_file_name(self):
-        pack = pack_repo.Pack('', 'a_name', '', '', '', '')
+        pack = pack_repo.ExistingPack('', 'a_name', '', '', '', '')
         self.assertEqual('a_name.pack', pack.file_name())



More information about the bazaar-commits mailing list