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