[MERGE] Let revno and revision-info tell me about the tree as well as the branch

Matthew D. Fuller fullermd at over-yonder.net
Fri Jun 5 09:35:04 BST 2009


> This may not be excessively clean, but it works.

This is slightly cleaner, since it gives the right answer for revno if
you're off the mainline, and a less ugly answer if you're off the
branch totally.



-- 
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-20090605082806-\
#   fi2sxktk053i9hox
# target_branch: ../bzr.dev/
# testament_sha1: 703b4100d05e6b30798f0996200201d48fb8fa03
# timestamp: 2009-06-05 03:28:48 -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 02:39:30 +0000
@@ -23,6 +23,10 @@
 * mail_client=claws now supports --body (and message body hooks).  Also uses
   configured from address.  (Barry Warsaw)
 
+* ``bzr revno`` and ``bzr revision-info`` now have a ``--tree`` option to
+  show revision info for the working tree instead of the branch.
+  (Matthew Fuller)
+
 Improvements
 ************
 

=== modified file 'bzrlib/builtins.py'
--- bzrlib/builtins.py	2009-06-02 09:18:26 +0000
+++ bzrlib/builtins.py	2009-06-05 08:28:06 +0000
@@ -474,11 +474,23 @@
 
     _see_also = ['info']
     takes_args = ['location?']
+    takes_options = [
+        Option('tree', help='Show revno of working tree'),
+        ]
 
     @display_command
-    def run(self, location=u'.'):
-        self.outf.write(str(Branch.open_containing(location)[0].revno()))
-        self.outf.write('\n')
+    def run(self, tree=False, location=u'.'):
+        branch = Branch.open_containing(location)[0]
+        if tree:
+            revid = WorkingTree.open_containing(location)[0]._last_revision()
+            try:
+                revno_t = branch.revision_id_to_dotted_revno(revid)
+            except errors.NoSuchRevision:
+                revno_t = ('???',)
+            revno = ".".join(str(n) for n in revno_t)
+        else:
+            revno = branch.revno()
+        self.outf.write(str(revno) + '\n')
 
 
 class cmd_revision_info(Command):
@@ -494,10 +506,12 @@
             short_name='d',
             type=unicode,
             ),
+        Option('tree', help='Show revno of working tree'),
         ]
 
     @display_command
-    def run(self, revision=None, directory=u'.', revision_info_list=[]):
+    def run(self, revision=None, directory=u'.', tree=False,
+            revision_info_list=[]):
 
         revs = []
         if revision is not None:
@@ -509,7 +523,12 @@
         b = Branch.open_containing(directory)[0]
 
         if len(revs) == 0:
-            revs.append(RevisionSpec.from_string('-1'))
+            if tree:
+                wt = WorkingTree.open_containing(directory)[0]
+                revs.append(RevisionSpec.from_string('revid:' + \
+                    wt._last_revision()))
+            else:
+                revs.append(RevisionSpec.from_string('-1'))
 
         for rev in revs:
             revision_id = rev.as_revision_id(b)

=== 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 02:39:18 +0000
@@ -86,3 +86,17 @@
 
         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')
+
+    def test_revision_info_tree(self):
+        # Make branch and checkout
+        wt = self.make_branch_and_tree('branch')
+        wt.commit('Commit one', rev_id='a at r-0-1')
+
+        # Make checkout and move the branch forward
+        self.run_bzr('checkout --lightweight branch checkout')
+        wt.commit('Commit two', rev_id='a at r-0-2')
+
+        # Make sure the checkout gives the right answer for branch and
+        # 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')

=== modified file 'bzrlib/tests/blackbox/test_revno.py'
--- bzrlib/tests/blackbox/test_revno.py	2009-03-23 14:59:43 +0000
+++ bzrlib/tests/blackbox/test_revno.py	2009-06-05 02:13:32 +0000
@@ -50,4 +50,24 @@
         self.assertEquals(int(bzr('revno a')), 2)
         self.assertEquals(int(bzr('revno a/baz')), 2)
 
+    def test_revno_tree(self):
+        # Make branch and checkout
+        os.mkdir('branch')
+        self.run_bzr('init branch')
+        self.run_bzr('checkout --lightweight branch checkout')
+
+        # Get the checkout out of date
+        self.build_tree(['branch/file'])
+        self.run_bzr('add branch/file')
+        self.run_bzr('commit -m mkfile branch')
+
+        # Make sure revno says we're on 1
+        out,err = self.run_bzr('revno checkout')
+        self.assertEqual('', err)
+        self.assertEqual('1\n', out)
+
+        # Make sure --tree knows it's still on 0
+        out,err = self.run_bzr('revno --tree checkout')
+        self.assertEqual('', err)
+        self.assertEqual('0\n', out)
 

# Begin bundle
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
4IU5gNS9CPgh/8XckU4UJD5Qm/jA


More information about the bazaar mailing list