Rev 2818: Move new revision index management to NewPack. in http://people.ubuntu.com/~robertc/baz2.0/repository

Robert Collins robertc at robertcollins.net
Mon Oct 15 02:33:39 BST 2007


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

------------------------------------------------------------
revno: 2818
revision-id: robertc at robertcollins.net-20071015013329-8n11v3m4tqx1tpen
parent: robertc at robertcollins.net-20071014230222-cbtbbp49uo4jbtjw
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Mon 2007-10-15 11:33:29 +1000
message:
  Move new revision index management to NewPack.
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 23:02:22 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2007-10-15 01:33:29 +0000
@@ -98,8 +98,13 @@
     ExistingPack and NewPack are used.
     """
 
-    def __init__(self):
-        pass
+    def __init__(self, revision_index):
+        """Create a pack instance.
+
+        :param revision_index: A GraphIndex for determining what revisions are
+            present in the Pack and accessing the locations of their texts.
+        """
+        self.revision_index = revision_index
 
     def revision_index_name(self, name):
         """The revision index is the name + .rix."""
@@ -123,8 +128,7 @@
 
     def __init__(self, transport, name, revision_index, inventory_index,
         text_index, signature_index):
-        Pack.__init__(self)
-        self.revision_index = revision_index
+        Pack.__init__(self, revision_index)
         self.inventory_index = inventory_index
         self.text_index = text_index
         self.signature_index = signature_index
@@ -154,6 +158,9 @@
 class NewPack(Pack):
     """An in memory proxy for a pack which is being created."""
 
+    def __init__(self):
+        Pack.__init__(self, InMemoryGraphIndex(1))
+
 
 class RepositoryPackCollection(object):
     """Management of packs within a repository."""
@@ -289,9 +296,9 @@
     def flush_revision_signature_indices(self, new_name):
         """Write out pending indices."""
         # write a revision index (might be empty)
-        new_index_name = NewPack().revision_index_name(new_name)
+        new_index_name = self.repo._packs._new_pack.revision_index_name(new_name)
         revision_index_length = self._index_transport.put_file(
-            new_index_name, self.repo._revision_write_index.finish())
+            new_index_name, self.repo._packs._new_pack.revision_index.finish())
         rev_index = GraphIndex(self._index_transport, new_index_name,
                 revision_index_length)
         if self.repo._revision_all_indices is None:
@@ -300,8 +307,7 @@
             # that in these mapping classes
             self.repo._revision_pack_map = self._make_index_map('.rix')[0]
         else:
-            del self.repo._revision_pack_map[self.repo._revision_write_index]
-            self.repo._revision_write_index = None
+            del self.repo._revision_pack_map[self.repo._packs._new_pack.revision_index]
             self.repo._revision_pack_map[rev_index] = (self._pack_tuple(new_name))
             # revisions 'knit' accessed : update it.
             self.repo._revision_all_indices.insert_index(0, rev_index)
@@ -929,7 +935,6 @@
         """Clear all cached data."""
         # cached revision data
         self.repo._revision_knit = None
-        self.repo._revision_write_index = None
         self.repo._revision_all_indices = None
         self.repo._revision_knit_access = None
         # cached signature data
@@ -954,6 +959,8 @@
         # remove the knit access object
         self.repo._inv_knit_access = None
         self.repo._inv_pack_map = None
+        # remove the open pack
+        self._new_pack = None
         # information about packs.
         self._names = None
         self.packs = []
@@ -1050,6 +1057,7 @@
         # Do not permit preparation for writing if we're not in a 'write lock'.
         if not self.repo.is_write_locked():
             raise errors.NotWriteLocked(self)
+        self._new_pack = NewPack()
 
     def _start_write_group(self):
         random_name = self._random_name()
@@ -1147,10 +1155,10 @@
         pack_map, indices = self.repo._packs._make_index_map('.rix')
         if self.repo.is_in_write_group():
             # allow writing: queue writes to a new index
-            indices.insert(0, self.repo._revision_write_index)
-            pack_map[self.repo._revision_write_index] = self.repo._open_pack_tuple
-            writer = self.repo._packs._open_pack_writer, self.repo._revision_write_index
-            add_callback = self.repo._revision_write_index.add_nodes
+            indices.insert(0, self.repo._packs._new_pack.revision_index)
+            pack_map[self.repo._packs._new_pack.revision_index] = self.repo._open_pack_tuple
+            writer = self.repo._packs._open_pack_writer, self.repo._packs._new_pack.revision_index
+            add_callback = self.repo._packs._new_pack.revision_index.add_nodes
         else:
             writer = None
             add_callback = None # no data-adding permitted.
@@ -1196,8 +1204,8 @@
         return self.repo._signature_knit
 
     def data_inserted(self):
-        if (getattr(self.repo, '_revision_write_index', None) and
-            self.repo._revision_write_index.key_count()):
+        if (getattr(self.repo._packs, '_new_pack', None) and
+            self.repo._packs._new_pack.revision_index.key_count()):
             return True
         if (getattr(self.repo, '_signature_write_index', None) and
             self.repo._signature_write_index.key_count()):
@@ -1206,16 +1214,15 @@
 
     def setup(self):
         # setup in-memory indices to accumulate data.
-        self.repo._revision_write_index = InMemoryGraphIndex(1)
         self.repo._signature_write_index = InMemoryGraphIndex(0)
         # if knit indices have been handed out, add a mutable
         # index to them
         if self.repo._revision_knit is not None:
-            self.repo._revision_all_indices.insert_index(0, self.repo._revision_write_index)
-            self.repo._revision_knit._index._add_callback = self.repo._revision_write_index.add_nodes
+            self.repo._revision_all_indices.insert_index(0, self.repo._packs._new_pack.revision_index)
+            self.repo._revision_knit._index._add_callback = self.repo._packs._new_pack.revision_index.add_nodes
             self.repo._revision_knit_access.set_writer(
                 self.repo._packs._open_pack_writer,
-                self.repo._revision_write_index, self.repo._open_pack_tuple)
+                self.repo._packs._new_pack.revision_index, self.repo._open_pack_tuple)
         if self.repo._signature_knit is not None:
             self.repo._signature_all_indices.insert_index(0, self.repo._signature_write_index)
             self.repo._signature_knit._index._add_callback = self.repo._signature_write_index.add_nodes

=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py	2007-10-14 23:02:22 +0000
+++ b/bzrlib/tests/test_repository.py	2007-10-15 01:33:29 +0000
@@ -34,7 +34,7 @@
                            UnknownFormatError,
                            UnsupportedFormatError,
                            )
-from bzrlib.index import GraphIndex
+from bzrlib.index import GraphIndex, InMemoryGraphIndex
 from bzrlib.repository import RepositoryFormat
 from bzrlib.tests import (
     TestCase,
@@ -1155,3 +1155,11 @@
     def test_file_name(self):
         pack = pack_repo.ExistingPack('', 'a_name', '', '', '', '')
         self.assertEqual('a_name.pack', pack.file_name())
+
+
+class TestNewPack(TestCaseWithTransport):
+    """Tests for pack_repo.NewPack."""
+
+    def test_new_instance_has_new_indices(self):
+        pack = pack_repo.NewPack()
+        self.assertIsInstance(pack.revision_index, InMemoryGraphIndex)



More information about the bazaar-commits mailing list