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