[MERGE] Some revision-info fixups

Matthew D. Fuller fullermd at over-yonder.net
Fri Jun 5 10:00:38 BST 2009


This fixes up revision-info so that it

(1) Uses Branch.revision_id_to_dotted_revno() instead of
    reimplementing it manually,

  (1.5) and does so locked so that it doesn't get revuilt every time
        it needs checked if you're asking about multiple revs, so it's
        much faster in those cases,

(2) Aligns the output based on what there actually is, rather than
    hardcoding a guess at the length of a revno, and

(3) Shows something more sensible than a blowup and traceback when
    given a revision it can't find in the {branch,repo}.


-- 
Matthew Fuller     (MF4839)   |  fullermd at over-yonder.net
Systems/Network Administrator |  http://www.over-yonder.net/~fullermd/
           On the Internet, nobody can hear you scream.
-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: fullermd at over-yonder.net-20090605085532-\
#   0ydoey2w54svcy00
# target_branch: file:///home/fullermd/src/bzr/revno-wt/
# testament_sha1: c2c2a34a2c591cdfeaeb2b37db450df505793d7b
# timestamp: 2009-06-05 03:57:01 -0500
# base_revision_id: pqm at pqm.ubuntu.com-20090604210544-x6j63s03knqk7qfg
# 
# Begin patch
=== modified file 'NEWS'
--- NEWS	2009-06-04 21:05:44 +0000
+++ NEWS	2009-06-05 08:44:51 +0000
@@ -43,6 +43,11 @@
 
   (Ian Clatworthy)
 
+* ``revivion-info`` now properly aligns the revnos/revids in the output
+  and doesn't traceback when given revisions not in the current branch.
+  Performance is also significantly improved when requesting multiple revs
+  at once.  (Matthew Fuller)
+
 
 Bug Fixes
 *********

=== modified file 'bzrlib/builtins.py'
--- bzrlib/builtins.py	2009-06-02 09:18:26 +0000
+++ bzrlib/builtins.py	2009-06-05 08:43:46 +0000
@@ -511,14 +511,27 @@
         if len(revs) == 0:
             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)
+        revinfos = []
+        maxlen = 0
+        b.lock_read()
+        try:
+            for rev in revs:
+                revision_id = rev.as_revision_id(b)
+                try:
+                    revno_tuple = b.revision_id_to_dotted_revno(revision_id)
+                except errors.NoSuchRevision:
+                    revno_tuple = ()
+                if revno_tuple:
+                    revno = ".".join(str(n) for n in revno_tuple)
+                else:
+                    revno = "???"
+                maxlen = max(maxlen, len(revno))
+                revinfos.append([revno, revision_id])
+        finally:
+            b.unlock()
+
+        for ri in revinfos:
+            print '%*s %s' % (maxlen, ri[0], ri[1])
 
 
 class cmd_add(Command):

=== modified file 'bzrlib/tests/blackbox/test_revision_info.py'
--- bzrlib/tests/blackbox/test_revision_info.py	2009-03-23 14:59:43 +0000
+++ bzrlib/tests/blackbox/test_revision_info.py	2009-06-05 08:55:32 +0000
@@ -47,9 +47,9 @@
 
         # Expected return values
         values = {
-            '1'    : '   1 a at r-0-1\n',
+            '1'    : '1 a at r-0-1\n',
             '1.1.1': '1.1.1 a at r-0-1.1.1\n',
-            '2'    : '   2 a at r-0-2\n'
+            '2'    : '2 a at r-0-2\n'
         }
 
         # Make sure with no arg it defaults to the head
@@ -60,7 +60,9 @@
         self.check_output(values['1.1.1'], 'revision-info 1.1.1')
         self.check_output(values['2'], 'revision-info 2')
         self.check_output(values['1']+values['2'], 'revision-info 1 2')
-        self.check_output(values['1']+values['1.1.1']+values['2'],
+        self.check_output('    '+values['1']+\
+                                 values['1.1.1']+\
+                          '    '+values['2'],
                           'revision-info 1 1.1.1 2')
         self.check_output(values['2']+values['1'], 'revision-info 2 1')
 
@@ -70,7 +72,9 @@
         self.check_output(values['1.1.1'], 'revision-info --revision 1.1.1')
         self.check_output(values['2'], 'revision-info -r 2')
         self.check_output(values['1']+values['2'], 'revision-info -r 1..2')
-        self.check_output(values['1']+values['1.1.1']+values['2'],
+        self.check_output('    '+values['1']+\
+                                 values['1.1.1']+\
+                          '    '+values['2'],
                           'revision-info -r 1..1.1.1..2')
         self.check_output(values['2']+values['1'], 'revision-info -r 2..1')
 
@@ -85,4 +89,4 @@
         wt = self.make_branch_and_tree('branch')
 
         wt.commit('Commit one', rev_id='a at r-0-1')
-        self.check_output('   1 a at r-0-1\n', 'revision-info -d branch')
+        self.check_output('1 a at r-0-1\n', 'revision-info -d branch')

# Begin bundle
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
6OEFyOu+1eSdEZogy1hSDA5v/xdyRThQkH9lVtM=


More information about the bazaar mailing list