Rev 4296: Lock new branches while we configure them in clone and sprout for less lock churn. in http://people.ubuntu.com/~robertc/baz2.0/pending/push.roundtrips

Robert Collins robertc at robertcollins.net
Wed Apr 15 04:20:52 BST 2009


At http://people.ubuntu.com/~robertc/baz2.0/pending/push.roundtrips

------------------------------------------------------------
revno: 4296
revision-id: robertc at robertcollins.net-20090415032048-u7ccp2v2ee14ebjt
parent: robertc at robertcollins.net-20090415020735-poizrhi1b98mtdgk
committer: Robert Collins <robertc at robertcollins.net>
branch nick: push.roundtrips
timestamp: Wed 2009-04-15 13:20:48 +1000
message:
  Lock new branches while we configure them in clone and sprout for less lock churn.
=== modified file 'bzrlib/branch.py'
--- a/bzrlib/branch.py	2009-04-14 07:11:01 +0000
+++ b/bzrlib/branch.py	2009-04-15 03:20:48 +0000
@@ -997,10 +997,14 @@
                      be truncated to end with revision_id.
         """
         result = to_bzrdir.create_branch()
-        if repository_policy is not None:
-            repository_policy.configure_branch(result)
-        self.copy_content_into(result, revision_id=revision_id)
-        return  result
+        result.lock_write()
+        try:
+            if repository_policy is not None:
+                repository_policy.configure_branch(result)
+            self.copy_content_into(result, revision_id=revision_id)
+        finally:
+            result.unlock()
+        return result
 
     @needs_read_lock
     def sprout(self, to_bzrdir, revision_id=None, repository_policy=None):
@@ -1012,10 +1016,13 @@
                      be truncated to end with revision_id.
         """
         result = to_bzrdir.create_branch()
-        if repository_policy is not None:
-            repository_policy.configure_branch(result)
-        self.copy_content_into(result, revision_id=revision_id)
-        result.set_parent(self.bzrdir.root_transport.base)
+        try:
+            if repository_policy is not None:
+                repository_policy.configure_branch(result)
+            self.copy_content_into(result, revision_id=revision_id)
+            result.set_parent(self.bzrdir.root_transport.base)
+        finally:
+            result.unlock()
         return result
 
     def _synchronize_history(self, destination, revision_id):

=== modified file 'bzrlib/tests/blackbox/test_push.py'
--- a/bzrlib/tests/blackbox/test_push.py	2009-04-15 02:07:35 +0000
+++ b/bzrlib/tests/blackbox/test_push.py	2009-04-15 03:20:48 +0000
@@ -217,7 +217,7 @@
         # being too low. If rpc_count increases, more network roundtrips have
         # become necessary for this use case. Please do not adjust this number
         # upwards without agreement from bzr's network support maintainers.
-        self.assertLength(28, self.hpss_calls)
+        self.assertLength(23, self.hpss_calls)
         remote = Branch.open('public')
         self.assertEndsWith(remote.get_stacked_on_url(), '/parent')
 




More information about the bazaar-commits mailing list