Rev 4419: Clean up 'bzr revision-info' to support revision not in the branch history. in http://bazaar.launchpad.net/~jameinel/bzr/tree_opt
John Arbash Meinel
john at arbash-meinel.com
Fri Jun 5 14:38:15 BST 2009
At http://bazaar.launchpad.net/~jameinel/bzr/tree_opt
------------------------------------------------------------
revno: 4419
revision-id: john at arbash-meinel.com-20090605133754-ngayy8f8eyop1nn7
parent: john at arbash-meinel.com-20090605132617-7kx1smlz82ktg5ej
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: tree_opt
timestamp: Fri 2009-06-05 08:37:54 -0500
message:
Clean up 'bzr revision-info' to support revision not in the branch history.
-------------- next part --------------
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py 2009-06-05 13:26:17 +0000
+++ b/bzrlib/builtins.py 2009-06-05 13:37:54 +0000
@@ -514,31 +514,41 @@
def run(self, revision=None, directory=u'.', tree=False,
revision_info_list=[]):
- revs = []
- if revision is not None:
- revs.extend(revision)
- if revision_info_list is not None:
- for rev in revision_info_list:
- revs.append(RevisionSpec.from_string(rev))
-
- b = Branch.open_containing(directory)[0]
-
- if len(revs) == 0:
- if tree:
- wt = WorkingTree.open_containing(directory)[0]
- revs.append(RevisionSpec.from_string('revid:' + \
- wt._last_revision()))
+ try:
+ wt = WorkingTree.open_containing(directory)[0]
+ b = wt.branch
+ wt.lock_read()
+ except (errors.NoWorkingTree, errors.NotLocalUrl):
+ wt = None
+ b = Branch.open_containing(directory)[0]
+ b.lock_read()
+ try:
+ revision_ids = []
+ if revision is not None:
+ revision_ids.extend(rev.as_revision_id(b) for rev in revision)
+ if revision_info_list is not None:
+ for rev_str in revision_info_list:
+ rev_spec = RevisionSpec.from_string(rev_str)
+ revision_ids.append(rev_spec.as_revision_id(b))
+ # No arguments supplied, default to the last revision
+ if len(revision_ids) == 0:
+ if tree:
+ revision_ids.append(wt.last_revision())
+ else:
+ revision_ids.append(b.last_revision())
+
+ for revision_id in revision_ids:
+ try:
+ dotted_revno = b.revision_id_to_dotted_revno(revision_id)
+ revno = '.'.join(str(i) for i in dotted_revno)
+ except errors.NoSuchRevision:
+ revno = '???'
+ print '%4s %s' % (revno, revision_id)
+ finally:
+ if wt is None:
+ b.unlock()
else:
- revs.append(RevisionSpec.from_string('-1'))
-
- for rev in revs:
- revision_id = rev.as_revision_id(b)
- try:
- revno = '%4d' % (b.revision_id_to_revno(revision_id))
- except errors.NoSuchRevision:
- dotted_map = b.get_revision_id_to_revno_map()
- revno = '.'.join(str(i) for i in dotted_map[revision_id])
- print '%s %s' % (revno, revision_id)
+ wt.unlock()
class cmd_add(Command):
=== modified file 'bzrlib/tests/blackbox/test_revision_info.py'
--- a/bzrlib/tests/blackbox/test_revision_info.py 2009-06-05 13:20:35 +0000
+++ b/bzrlib/tests/blackbox/test_revision_info.py 2009-06-05 13:37:54 +0000
@@ -100,3 +100,15 @@
# tree
self.check_output(' 2 a at r-0-2\n', 'revision-info -d checkout')
self.check_output(' 1 a at r-0-1\n', 'revision-info --tree -d checkout')
+
+ def test_revision_info_not_in_history(self):
+ builder = self.make_branch_builder('branch')
+ builder.start_series()
+ builder.build_snapshot('A-id', None, [
+ ('add', ('', 'root-id', 'directory', None))])
+ builder.build_snapshot('B-id', ['A-id'], [])
+ builder.build_snapshot('C-id', ['A-id'], [])
+ builder.finish_series()
+ self.check_output(' 1 A-id\n ??? B-id\n 2 C-id\n',
+ 'revision-info -d branch'
+ ' revid:A-id revid:B-id revid:C-id')
More information about the bazaar-commits
mailing list