Rev 3022: Lock branches while doing revision specification lookups. in http://people.ubuntu.com/~robertc/baz2.0/pack.read-locks

Robert Collins robertc at robertcollins.net
Thu Nov 22 00:33:31 GMT 2007


At http://people.ubuntu.com/~robertc/baz2.0/pack.read-locks

------------------------------------------------------------
revno: 3022
revision-id:robertc at robertcollins.net-20071122003315-ldoyi2mi3nma5qnf
parent: robertc at robertcollins.net-20071122003029-puc7qosvic1beace
committer: Robert Collins <robertc at robertcollins.net>
branch nick: pack.read-locks
timestamp: Thu 2007-11-22 11:33:15 +1100
message:
  Lock branches while doing revision specification lookups.
modified:
  bzrlib/revisionspec.py         revisionspec.py-20050907152633-17567659fd5c0ddb
=== modified file 'bzrlib/revisionspec.py'
--- a/bzrlib/revisionspec.py	2007-08-20 13:03:46 +0000
+++ b/bzrlib/revisionspec.py	2007-11-22 00:33:15 +0000
@@ -639,22 +639,28 @@
         for r, b in ((revision_a, branch), (revision_b, other_branch)):
             if r in (None, revision.NULL_REVISION):
                 raise errors.NoCommits(b)
-        revision_source = revision.MultipleRevisionSources(
-                branch.repository, other_branch.repository)
-        graph = branch.repository.get_graph(other_branch.repository)
-        revision_a = revision.ensure_null(revision_a)
-        revision_b = revision.ensure_null(revision_b)
-        if revision.NULL_REVISION in (revision_a, revision_b):
-            rev_id = revision.NULL_REVISION
-        else:
-            rev_id = graph.find_unique_lca(revision_a, revision_b)
-            if rev_id == revision.NULL_REVISION:
-                raise errors.NoCommonAncestor(revision_a, revision_b)
+        branch.lock_read()
+        other_branch.lock_read()
         try:
-            revno = branch.revision_id_to_revno(rev_id)
-        except errors.NoSuchRevision:
-            revno = None
-        return RevisionInfo(branch, revno, rev_id)
+            revision_source = revision.MultipleRevisionSources(
+                    branch.repository, other_branch.repository)
+            graph = branch.repository.get_graph(other_branch.repository)
+            revision_a = revision.ensure_null(revision_a)
+            revision_b = revision.ensure_null(revision_b)
+            if revision.NULL_REVISION in (revision_a, revision_b):
+                rev_id = revision.NULL_REVISION
+            else:
+                rev_id = graph.find_unique_lca(revision_a, revision_b)
+                if rev_id == revision.NULL_REVISION:
+                    raise errors.NoCommonAncestor(revision_a, revision_b)
+            try:
+                revno = branch.revision_id_to_revno(rev_id)
+            except errors.NoSuchRevision:
+                revno = None
+            return RevisionInfo(branch, revno, rev_id)
+        finally:
+            branch.unlock()
+            other_branch.unlock()
 
 
 SPEC_TYPES.append(RevisionSpec_ancestor)



More information about the bazaar-commits mailing list