Rev 2493: Fix annotate_iter to lock the basis tree appropriately. in http://bazaar.launchpad.net/~bzr/bzr/dirstate
Robert Collins
robertc at robertcollins.net
Wed Mar 7 06:05:50 GMT 2007
At http://bazaar.launchpad.net/~bzr/bzr/dirstate
------------------------------------------------------------
revno: 2493
revision-id: robertc at robertcollins.net-20070307060453-57bjf3z967sc6cda
parent: robertc at robertcollins.net-20070307054158-j7yh62s59nz3rqdy
committer: Robert Collins <robertc at robertcollins.net>
branch nick: dirstate
timestamp: Wed 2007-03-07 17:04:53 +1100
message:
Fix annotate_iter to lock the basis tree appropriately.
modified:
bzrlib/workingtree.py workingtree.py-20050511021032-29b6ec0a681e02e3
=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py 2007-03-07 01:14:11 +0000
+++ b/bzrlib/workingtree.py 2007-03-07 06:04:53 +0000
@@ -487,26 +487,30 @@
"""
file_id = osutils.safe_file_id(file_id)
basis = self.basis_tree()
- changes = self._iter_changes(basis, True, [self.id2path(file_id)],
- require_versioned=True).next()
- changed_content, kind = changes[2], changes[6]
- if not changed_content:
- return basis.annotate_iter(file_id)
- if kind[1] is None:
- return None
- import annotate
- if kind[0] != 'file':
- old_lines = []
- else:
- old_lines = list(basis.annotate_iter(file_id))
- old = [old_lines]
- for tree in self.branch.repository.revision_trees(
- self.get_parent_ids()[1:]):
- if file_id not in tree:
- continue
- old.append(list(tree.annotate_iter(file_id)))
- return annotate.reannotate(old, self.get_file(file_id).readlines(),
- CURRENT_REVISION)
+ basis.lock_read()
+ try:
+ changes = self._iter_changes(basis, True, [self.id2path(file_id)],
+ require_versioned=True).next()
+ changed_content, kind = changes[2], changes[6]
+ if not changed_content:
+ return basis.annotate_iter(file_id)
+ if kind[1] is None:
+ return None
+ import annotate
+ if kind[0] != 'file':
+ old_lines = []
+ else:
+ old_lines = list(basis.annotate_iter(file_id))
+ old = [old_lines]
+ for tree in self.branch.repository.revision_trees(
+ self.get_parent_ids()[1:]):
+ if file_id not in tree:
+ continue
+ old.append(list(tree.annotate_iter(file_id)))
+ return annotate.reannotate(old, self.get_file(file_id).readlines(),
+ CURRENT_REVISION)
+ finally:
+ basis.unlock()
def get_parent_ids(self):
"""See Tree.get_parent_ids.
More information about the bazaar-commits
mailing list