Rev 2799: Basic implementation of all_packs. in http://people.ubuntu.com/~robertc/baz2.0/repository
Robert Collins
robertc at robertcollins.net
Wed Oct 10 01:54:26 BST 2007
At http://people.ubuntu.com/~robertc/baz2.0/repository
------------------------------------------------------------
revno: 2799
revision-id: robertc at robertcollins.net-20071010005409-4o492b9bqzatqfww
parent: robertc at robertcollins.net-20071009034320-f2h2awd4nx26l8ek
committer: Robert Collins <robertc at robertcollins.net>
branch nick: repository
timestamp: Wed 2007-10-10 10:54:09 +1000
message:
Basic implementation of all_packs.
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-08 02:02:31 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2007-10-10 00:54:09 +0000
@@ -93,13 +93,24 @@
class Pack(object):
"""An in memory proxy for a .pack and its indices."""
- def __init__(self):
- self.revision_index = None
- self.inventory_index = None
- self.text_index = None
- self.signature_index = None
- self.name = None
- self.transport = None
+ def __init__(self, transport=None, name=None, revision_index=None,
+ inventory_index=None, text_index=None, signature_index=None):
+ 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
+
+ def __eq__(self, other):
+ return self.__dict__ == other.__dict__
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __repr__(self):
+ return "<bzrlib.repofmt.pack_repo.Pack object at 0x%x, %s, %s" % (
+ id(self), self.transport, self.name)
def get_revision_count(self):
return self.revision_index.key_count()
@@ -167,6 +178,16 @@
revision_id, parents, new_lines, nostore_sha=nostore_sha,
random_id=random_revid, check_content=False)[0:2]
+ def all_packs(self):
+ """Return a list of all the Pack objects this repository has.
+
+ :return: A list of Pack objects for all the packs in the repository.
+ """
+ result = []
+ for name in self.names():
+ result.append(Pack(self._pack_transport, name, None, None, None))
+ return result
+
def all_pack_details(self):
"""Return a list of all the packs as transport,name tuples.
=== modified file 'bzrlib/tests/test_repository.py'
--- a/bzrlib/tests/test_repository.py 2007-09-23 20:29:13 +0000
+++ b/bzrlib/tests/test_repository.py 2007-10-10 00:54:09 +0000
@@ -49,7 +49,7 @@
upgrade,
workingtree,
)
-from bzrlib.repofmt import knitrepo, weaverepo
+from bzrlib.repofmt import knitrepo, weaverepo, pack_repo
class TestDefaultFormat(TestCase):
@@ -598,6 +598,7 @@
self.assertRaises(errors.OutSideTransaction,
inv.add_lines, 'foo', [], [])
+
class TestExperimentalNoSubtrees(TestCaseWithTransport):
def get_format(self):
@@ -764,6 +765,16 @@
self.assertEqual(1, len(list(index.iter_all_entries())))
self.assertEqual(2, len(tree.branch.repository.all_revision_ids()))
+class TestExperimentalSubtrees(TestExperimentalNoSubtrees):
+
+ def get_format(self):
+ return bzrdir.format_registry.make_bzrdir('experimental-subtree')
+
+ def check_format(self, t):
+ self.assertEqualDiff('Bazaar Experimental subtrees\n',
+ t.get('format').read())
+
+
# TESTS TO WRITE:
# XXX: signatures must be preserved. add a test.
# XXX: packs w/o revisions are ignored by autopack
@@ -885,12 +896,84 @@
existing_packs, [1000, 1000, 10])
self.assertEqual([[2, ["single2", "single1"]], [0, []]], pack_operations)
-
-class TestExperimentalSubtrees(TestExperimentalNoSubtrees):
-
- def get_format(self):
- return bzrdir.format_registry.make_bzrdir('experimental-subtree')
-
- def check_format(self, t):
- self.assertEqualDiff('Bazaar Experimental subtrees\n',
- t.get('format').read())
+ def test_all_packs_none(self):
+ format = self.get_format()
+ tree = self.make_branch_and_tree('.', format=format)
+ tree.lock_read()
+ self.addCleanup(tree.unlock)
+ packs = tree.branch.repository._packs
+ packs.ensure_loaded()
+ self.assertEqual([], packs.all_packs())
+
+ def test_all_packs_one(self):
+ format = self.get_format()
+ tree = self.make_branch_and_tree('.', format=format)
+ tree.commit('start')
+ tree.lock_read()
+ self.addCleanup(tree.unlock)
+ packs = tree.branch.repository._packs
+ packs.ensure_loaded()
+ self.assertEqual([pack_repo.Pack(packs._pack_transport,
+ packs.names()[0], None, None, None, None)], packs.all_packs())
+
+ def test_all_packs_two(self):
+ format = self.get_format()
+ tree = self.make_branch_and_tree('.', format=format)
+ tree.commit('start')
+ tree.commit('continue')
+ tree.lock_read()
+ self.addCleanup(tree.unlock)
+ packs = tree.branch.repository._packs
+ packs.ensure_loaded()
+ self.assertEqual([
+ pack_repo.Pack(packs._pack_transport,
+ packs.names()[0], None, None, None, None),
+ pack_repo.Pack(packs._pack_transport,
+ packs.names()[1], None, None, None, None),
+ ], packs.all_packs())
+
+
+class TestPack(TestCaseWithTransport):
+ """Tests for the Pack object."""
+
+ def assertCurrentlyEqual(self, left, right):
+ self.assertTrue(left == right)
+ self.assertTrue(right == left)
+ self.assertFalse(left != right)
+ self.assertFalse(right != left)
+
+ def assertCurrentlyNotEqual(self, left, right):
+ self.assertFalse(left == right)
+ self.assertFalse(right == left)
+ self.assertTrue(left != right)
+ self.assertTrue(right != left)
+
+ def test___eq____ne__(self):
+ 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'
+ self.assertCurrentlyNotEqual(left, right)
+ right.revision_index = 'a'
+ self.assertCurrentlyEqual(left, right)
+ left.inventory_index = 'a'
+ self.assertCurrentlyNotEqual(left, right)
+ right.inventory_index = 'a'
+ self.assertCurrentlyEqual(left, right)
+ left.text_index = 'a'
+ self.assertCurrentlyNotEqual(left, right)
+ right.text_index = 'a'
+ self.assertCurrentlyEqual(left, right)
+ left.signature_index = 'a'
+ self.assertCurrentlyNotEqual(left, right)
+ right.signature_index = 'a'
+ self.assertCurrentlyEqual(left, right)
+ left.name = 'a'
+ self.assertCurrentlyNotEqual(left, right)
+ right.name = 'a'
+ self.assertCurrentlyEqual(left, right)
+ left.transport = 'a'
+ self.assertCurrentlyNotEqual(left, right)
+ right.transport = 'a'
+ self.assertCurrentlyEqual(left, right)
More information about the bazaar-commits
mailing list