Rev 2747: Add convenience Repository.call_in_write_group and use this for tests that in http://sourcefrog.net/bzr/pack-repository

Martin Pool mbp at sourcefrog.net
Tue Aug 28 11:26:39 BST 2007


At http://sourcefrog.net/bzr/pack-repository

------------------------------------------------------------
revno: 2747
revision-id: mbp at sourcefrog.net-20070828102638-hljo5fm7a4bjthg2
parent: mbp at sourcefrog.net-20070828095109-8ljoy65xsu2dv0pf
committer: Martin Pool <mbp at sourcefrog.net>
branch nick: pack-repository
timestamp: Tue 2007-08-28 20:26:38 +1000
message:
  Add convenience Repository.call_in_write_group and use this for tests that
  access Repository.add_inventory directly.
modified:
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/blackbox/test_reconcile.py test_fix.py-20060223013051-9a188e15a5ee9451
  bzrlib/tests/interrepository_implementations/test_interrepository.py test_interrepository.py-20060220061411-1ec13fa99e5e3eee
  bzrlib/tests/repository_implementations/test_reconcile.py test_reconcile.py-20060223022332-572ef70a3288e369
=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2007-08-26 02:06:11 +0000
+++ b/bzrlib/repository.py	2007-08-28 10:26:38 +0000
@@ -526,6 +526,27 @@
         # so we can detect unlock/relock - the write group is now entered.
         self._write_group = self.get_transaction()
 
+    @needs_write_lock
+    def call_in_write_group(self, fn, *args, **kwargs):
+        """Call a callable within a write group.
+
+        On error the write group is aborted and on success it is commited.
+
+        This method may not be called if the repository is already in a 
+        write group.
+
+        This can be used for testing methods normally used within a larger 
+        write group.
+        """
+        self.start_write_group()
+        try:
+            result = fn(*args, **kwargs)
+        except:
+            self.abort_write_group()
+            raise
+        self.commit_write_group()
+        return result
+
     def _start_write_group(self):
         """Template method for per-repository write group startup.
         

=== modified file 'bzrlib/tests/blackbox/test_reconcile.py'
--- a/bzrlib/tests/blackbox/test_reconcile.py	2007-06-27 19:13:50 +0000
+++ b/bzrlib/tests/blackbox/test_reconcile.py	2007-08-28 10:26:38 +0000
@@ -54,7 +54,8 @@
         repo = t.branch.repository
         inv = Inventory(revision_id='missing')
         inv.root.revision='missing'
-        repo.add_inventory('missing', inv, [])
+        repo.call_in_write_group(
+                repo.add_inventory, 'missing', inv, [])
         (out, err) = self.run_bzr('reconcile')
         self.assertEqualDiff(out, "Reconciling repository %s\n"
                                   "Backup Inventory created.\n"

=== modified file 'bzrlib/tests/interrepository_implementations/test_interrepository.py'
--- a/bzrlib/tests/interrepository_implementations/test_interrepository.py	2007-08-23 23:41:32 +0000
+++ b/bzrlib/tests/interrepository_implementations/test_interrepository.py	2007-08-28 10:26:38 +0000
@@ -186,7 +186,8 @@
         source.start_write_group()
         inv['id'].revision = 'b'
         inv.revision_id = 'b'
-        sha1 = source.add_inventory('b', inv, ['a'])
+        sha1 = source.call_in_write_group(
+                source.add_inventory, 'b', inv, ['a'])
         rev = Revision(timestamp=0,
                        timezone=None,
                        committer="Foo Bar <foo at example.com>",
@@ -299,7 +300,7 @@
         repo = self.make_repository('with_ghost_rev')
         repo.lock_write()
         repo.start_write_group()
-        sha1 = repo.add_inventory('ghost', inv, [])
+        sha1 = repo.call_in_write_group(repo.add_inventory, 'ghost', inv, [])
         rev = bzrlib.revision.Revision(timestamp=0,
                                        timezone=None,
                                        committer="Foo Bar <foo at example.com>",
@@ -316,7 +317,8 @@
         inv.root.revision = 'with_ghost'
         repo.lock_write()
         repo.start_write_group()
-        sha1 = repo.add_inventory('with_ghost', inv, [])
+        sha1 = repo.call_in_write_group(
+                repo.add_inventory, 'with_ghost', inv, [])
         rev = bzrlib.revision.Revision(timestamp=0,
                                        timezone=None,
                                        committer="Foo Bar <foo at example.com>",

=== modified file 'bzrlib/tests/repository_implementations/test_reconcile.py'
--- a/bzrlib/tests/repository_implementations/test_reconcile.py	2007-08-22 06:30:25 +0000
+++ b/bzrlib/tests/repository_implementations/test_reconcile.py	2007-08-28 10:26:38 +0000
@@ -60,7 +60,7 @@
         repo.start_write_group()
         inv = Inventory(revision_id='missing')
         inv.root.revision = 'missing'
-        repo.add_inventory('missing', inv, [])
+        repo.call_in_write_group(repo.add_inventory, 'missing', inv, [])
         repo.commit_write_group()
         repo.unlock()
 
@@ -71,10 +71,10 @@
         repo = self.make_repository('inventory_without_revision_and_ghost')
         repo.lock_write()
         repo.start_write_group()
-        repo.add_inventory('missing', inv, [])
+        repo.call_in_write_group(repo.add_inventory, 'missing', inv, [])
         inv = Inventory(revision_id='references_missing')
         inv.root.revision = 'references_missing'
-        sha1 = repo.add_inventory('references_missing', inv, ['missing'])
+        sha1 = repo.call_in_write_group(repo.add_inventory, 'references_missing', inv, ['missing'])
         rev = Revision(timestamp=0,
                        timezone=None,
                        committer="Foo Bar <foo at example.com>",
@@ -93,7 +93,7 @@
         repo.start_write_group()
         inv = Inventory(revision_id='ghost')
         inv.root.revision = 'ghost'
-        sha1 = repo.add_inventory('ghost', inv, [])
+        sha1 = repo.call_in_write_group(repo.add_inventory, 'ghost', inv, [])
         rev = Revision(timestamp=0,
                        timezone=None,
                        committer="Foo Bar <foo at example.com>",
@@ -114,7 +114,7 @@
         repo.start_write_group()
         inv = Inventory(revision_id='the_ghost')
         inv.root.revision = 'the_ghost'
-        sha1 = repo.add_inventory('the_ghost', inv, [])
+        sha1 = repo.call_in_write_group(repo.add_inventory, 'the_ghost', inv, [])
         rev = Revision(timestamp=0,
                        timezone=None,
                        committer="Foo Bar <foo at example.com>",
@@ -317,7 +317,8 @@
         repo.start_write_group()
         inv = Inventory(revision_id='wrong-first-parent')
         inv.root.revision = 'wrong-first-parent'
-        sha1 = repo.add_inventory('wrong-first-parent', inv, ['2', '1'])
+        sha1 = repo.call_in_write_group(repo.add_inventory,
+                'wrong-first-parent', inv, ['2', '1'])
         rev = Revision(timestamp=0,
                        timezone=None,
                        committer="Foo Bar <foo at example.com>",
@@ -335,7 +336,8 @@
         repo.start_write_group()
         inv = Inventory(revision_id='wrong-secondary-parent')
         inv.root.revision = 'wrong-secondary-parent'
-        sha1 = repo.add_inventory('wrong-secondary-parent', inv, ['1', '3', '2'])
+        sha1 = repo.call_in_write_group(repo.add_inventory,
+                'wrong-secondary-parent', inv, ['1', '3', '2'])
         rev = Revision(timestamp=0,
                        timezone=None,
                        committer="Foo Bar <foo at example.com>",




More information about the bazaar-commits mailing list