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