Rev 2439: (erik, bialix, r=john) Tags in long log in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Sat Apr 21 15:47:16 BST 2007


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 2439
revision-id: pqm at pqm.ubuntu.com-20070421144713-wrfv38pfywoeg408
parent: pqm at pqm.ubuntu.com-20070420154033-kkrk7tn575z1o491
parent: bialix at ukr.net-20070421141508-8b2nqv6i2a0feuex
committer: Canonical.com Patch Queue Manager<pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Sat 2007-04-21 15:47:13 +0100
message:
  (erik, bialix, r=john) Tags in long log
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
  bzrlib/tag.py                  tag.py-20070212110532-91cw79inah2cfozx-1
  bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
  bzrlib/tests/branch_implementations/test_tags.py test_tags.py-20070212110545-w2s799hm2jlbsmg5-1
    ------------------------------------------------------------
    revno: 2388.1.13
    merged: bialix at ukr.net-20070421141508-8b2nqv6i2a0feuex
    parent: bialix at ukr.net-20070419200150-yyltrlev3s65w9h9
    parent: pqm at pqm.ubuntu.com-20070420154033-kkrk7tn575z1o491
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: erik.tags
    timestamp: Sat 2007-04-21 17:15:08 +0300
    message:
      merge bzr.dev
    ------------------------------------------------------------
    revno: 2388.1.12
    merged: bialix at ukr.net-20070419200150-yyltrlev3s65w9h9
    parent: bialix at ukr.net-20070419192839-p964uu06n6vbjgrt
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: erik.tags
    timestamp: Thu 2007-04-19 23:01:50 +0300
    message:
      direct test for tags.get_reverse_tag_dict()
    ------------------------------------------------------------
    revno: 2388.1.11
    merged: bialix at ukr.net-20070419192839-p964uu06n6vbjgrt
    parent: bialix at ukr.net-20070412111226-acm9l3u82mxajriw
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: erik.tags
    timestamp: Thu 2007-04-19 22:28:39 +0300
    message:
      changes after John's review
    ------------------------------------------------------------
    revno: 2388.1.10
    merged: bialix at ukr.net-20070412111226-acm9l3u82mxajriw
    parent: erik at bagfors.nu-20070411011800-7gxbox8gbqrdp40i
    committer: Alexander Belchenko <bialix at ukr.net>
    branch nick: erik.tags
    timestamp: Thu 2007-04-12 14:12:26 +0300
    message:
      Slightly reworked: use None instead of [] as default tags list; PEP-8
    ------------------------------------------------------------
    revno: 2388.1.9
    merged: erik at bagfors.nu-20070411011800-7gxbox8gbqrdp40i
    parent: erik at bagfors.nu-20070411010457-vgajajul01xb9hl6
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Wed 2007-04-11 03:18:00 +0200
    message:
      test for merges with tags in log
    ------------------------------------------------------------
    revno: 2388.1.8
    merged: erik at bagfors.nu-20070411010457-vgajajul01xb9hl6
    parent: erik at bagfors.nu-20070411001329-ngzhv000ur5tffmn
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Wed 2007-04-11 03:04:57 +0200
    message:
      Redo based on input from Alexander
    ------------------------------------------------------------
    revno: 2388.1.7
    merged: erik at bagfors.nu-20070411001329-ngzhv000ur5tffmn
    parent: erik at bagfors.nu-20070409231340-2pak5i4mxsby70ir
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Wed 2007-04-11 02:13:29 +0200
    message:
      use , to separate tags in log
    ------------------------------------------------------------
    revno: 2388.1.6
    merged: erik at bagfors.nu-20070409231340-2pak5i4mxsby70ir
    parent: erik at bagfors.nu-20070405095117-ndglm72iuaxpi6u8
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Tue 2007-04-10 01:13:40 +0200
    message:
      change order of log headers
    ------------------------------------------------------------
    revno: 2388.1.5
    merged: erik at bagfors.nu-20070405095117-ndglm72iuaxpi6u8
    parent: erik at bagfors.nu-20070404222123-8bg6539vy9suln32
    parent: pqm at pqm.ubuntu.com-20070405073143-8fa894c829ab5e50
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Thu 2007-04-05 11:51:17 +0200
    message:
      [merge] bzr.dev
    ------------------------------------------------------------
    revno: 2388.1.4
    merged: erik at bagfors.nu-20070404222123-8bg6539vy9suln32
    parent: erik at bagfors.nu-20070404222059-bo7nbo782gkvqfhb
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Thu 2007-04-05 00:21:23 +0200
    message:
      added NEWS entry
    ------------------------------------------------------------
    revno: 2388.1.3
    merged: erik at bagfors.nu-20070404222059-bo7nbo782gkvqfhb
    parent: erik at bagfors.nu-20070404192802-pmu7ppsj4v8idg2f
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Thu 2007-04-05 00:20:59 +0200
    message:
      tests for tags in log output
    ------------------------------------------------------------
    revno: 2388.1.2
    merged: erik at bagfors.nu-20070404192802-pmu7ppsj4v8idg2f
    parent: erik at bagfors.nu-20070404192718-iqk7l4s93rnqnfad
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Wed 2007-04-04 21:28:02 +0200
    message:
      Use the reverse tag dict to show tags in log output
    ------------------------------------------------------------
    revno: 2388.1.1
    merged: erik at bagfors.nu-20070404192718-iqk7l4s93rnqnfad
    parent: pqm at pqm.ubuntu.com-20070330064022-bdce9356befc3795
    committer: Erik Bagfors <erik at bagfors.nu>
    branch nick: bzr.taglogs
    timestamp: Wed 2007-04-04 21:27:18 +0200
    message:
      created reverse_tag_dict in tags.py
=== modified file 'NEWS'
--- a/NEWS	2007-04-20 15:40:33 +0000
+++ b/NEWS	2007-04-21 14:15:08 +0000
@@ -21,6 +21,9 @@
       documentation, and the bzr.1 man page also include this information.
       (Robert Collins)
 
+    * Tags are now included in logs, that use the long log formatter. 
+      (Erik BÃ¥gfors, Alexander Belchenko)
+
   INTERNALS:
 
     * bzrlib API compatability with 0.8 has been dropped, cleaning up some

=== modified file 'bzrlib/log.py'
--- a/bzrlib/log.py	2007-02-07 03:09:58 +0000
+++ b/bzrlib/log.py	2007-04-19 19:28:39 +0000
@@ -224,6 +224,12 @@
     view_revisions = list(get_view_revisions(mainline_revs, rev_nos, branch,
                           direction, include_merges=include_merges))
 
+    use_tags = getattr(lf, 'supports_tags', False)
+    if use_tags:
+        rev_tag_dict = {}
+        if branch.supports_tags():
+            rev_tag_dict = branch.tags.get_reverse_tag_dict()
+
     def iter_revisions():
         # r = revision, n = revno, d = merge depth
         revision_ids = [r for r, n, d in view_revisions]
@@ -257,21 +263,28 @@
 
         if merge_depth == 0:
             # a mainline revision.
-                
+
             if specific_fileid:
                 if not delta.touches_file_id(specific_fileid):
                     continue
-    
+
             if not verbose:
                 # although we calculated it, throw it away without display
                 delta = None
 
-            lf.show(revno, rev, delta)
+            if use_tags:
+                lf.show(revno, rev, delta, rev_tag_dict.get(rev_id))
+            else:
+                lf.show(revno, rev, delta)
         else:
             if show_merge_revno is None:
                 lf.show_merge(rev, merge_depth)
             else:
-                lf.show_merge_revno(rev, merge_depth, revno)
+                if use_tags:
+                    lf.show_merge_revno(rev, merge_depth, revno,
+                                        rev_tag_dict.get(rev_id))
+                else:
+                    lf.show_merge_revno(rev, merge_depth, revno)
 
 
 def get_view_revisions(mainline_revs, rev_nos, branch, direction,
@@ -340,28 +353,38 @@
 
     def short_committer(self, rev):
         return re.sub('<.*@.*>', '', rev.committer).strip(' ')
-    
-    
+
+
 class LongLogFormatter(LogFormatter):
-    def show(self, revno, rev, delta):
-        return self._show_helper(revno=revno, rev=rev, delta=delta)
+
+    supports_tags = True    # must exist and be True
+                            # if this log formatter support tags.
+                            # .show() and .show_merge_revno() must then accept
+                            # the 'tags'-argument with list of tags
+
+    def show(self, revno, rev, delta, tags=None):
+        return self._show_helper(revno=revno, rev=rev, delta=delta, tags=tags)
 
     @deprecated_method(zero_eleven)
     def show_merge(self, rev, merge_depth):
-        return self._show_helper(rev=rev, indent='    '*merge_depth, merged=True, delta=None)
+        return self._show_helper(rev=rev, indent='    '*merge_depth,
+                                 merged=True, delta=None)
 
-    def show_merge_revno(self, rev, merge_depth, revno):
+    def show_merge_revno(self, rev, merge_depth, revno, tags=None):
         """Show a merged revision rev, with merge_depth and a revno."""
         return self._show_helper(rev=rev, revno=revno,
-            indent='    '*merge_depth, merged=True, delta=None)
+            indent='    '*merge_depth, merged=True, delta=None, tags=tags)
 
-    def _show_helper(self, rev=None, revno=None, indent='', merged=False, delta=None):
+    def _show_helper(self, rev=None, revno=None, indent='', merged=False,
+                     delta=None, tags=None):
         """Show a revision, either merged or not."""
         from bzrlib.osutils import format_date
         to_file = self.to_file
         print >>to_file,  indent+'-' * 60
         if revno is not None:
             print >>to_file,  indent+'revno:', revno
+        if tags:
+            print >>to_file, indent+'tags: %s' % (', '.join(tags))
         if merged:
             print >>to_file,  indent+'merged:', rev.revision_id
         elif self.show_ids:
@@ -370,6 +393,7 @@
             for parent_id in rev.parent_ids:
                 print >>to_file, indent+'parent:', parent_id
         print >>to_file,  indent+'committer:', rev.committer
+
         try:
             print >>to_file, indent+'branch nick: %s' % \
                 rev.properties['branch-nick']

=== modified file 'bzrlib/tag.py'
--- a/bzrlib/tag.py	2007-02-26 05:29:05 +0000
+++ b/bzrlib/tag.py	2007-04-19 19:28:39 +0000
@@ -112,6 +112,18 @@
         finally:
             self.branch.unlock()
 
+    def get_reverse_tag_dict(self):
+        """Returns a dict with revisions as keys
+           and a list of tags for that revision as value"""
+        d = self.get_tag_dict()
+        rev = {}
+        for key in d:
+            try:
+                rev[d[key]].append(key)
+            except KeyError:
+                rev[d[key]] = [key]
+        return rev
+
     def delete_tag(self, tag_name):
         """Delete a tag definition.
         """

=== modified file 'bzrlib/tests/blackbox/test_log.py'
--- a/bzrlib/tests/blackbox/test_log.py	2007-02-09 18:23:21 +0000
+++ b/bzrlib/tests/blackbox/test_log.py	2007-04-19 19:28:39 +0000
@@ -27,8 +27,11 @@
 
 class TestLog(ExternalBase):
 
-    def _prepare(self):
-        self.runbzr("init")
+    def _prepare(self, format=None):
+        if format:
+            self.runbzr("init --format="+format)
+        else:
+            self.runbzr("init")
         self.build_tree(['hello.txt', 'goodbye.txt', 'meep.txt'])
         self.runbzr("add hello.txt")
         self.runbzr("commit -m message1 hello.txt")
@@ -116,6 +119,36 @@
         self.assertContainsRe(
             err, 'Path does not have any revision history: does-not-exist')
 
+    def test_log_with_tags(self):
+        self._prepare(format='dirstate-tags')
+        self.runbzr('tag -r1 tag1')
+        self.runbzr('tag -r1 tag1.1')
+        self.runbzr('tag tag3')
+        
+        log = self.runbzr("log -r-1")[0]
+        self.assertTrue('tags: tag3' in log)
+
+        log = self.runbzr("log -r1")[0]
+        # I guess that we can't know the order of tags in the output
+        # since dicts are unordered, need to check both possibilities
+        self.assertContainsRe(log, r'tags: (tag1, tag1\.1|tag1\.1, tag1)')
+
+    def test_merged_log_with_tags(self):
+        os.mkdir('branch1')
+        os.chdir('branch1')
+        self._prepare(format='dirstate-tags')
+        os.chdir('..')
+        self.runbzr('branch branch1 branch2')
+        os.chdir('branch1')
+        self.runbzr('commit -m foobar --unchanged')
+        self.runbzr('tag tag1')
+        os.chdir('../branch2')
+        self.runbzr('merge ../branch1')
+        self.runbzr('commit -m merge_branch_1')
+        log = self.runbzr("log -r-1")[0]
+        self.assertContainsRe(log, r'    tags: tag1')
+
+
 class TestLogMerges(ExternalBase):
 
     def test_merges_are_indented_by_level(self):

=== modified file 'bzrlib/tests/branch_implementations/test_tags.py'
--- a/bzrlib/tests/branch_implementations/test_tags.py	2007-02-26 05:29:05 +0000
+++ b/bzrlib/tests/branch_implementations/test_tags.py	2007-04-19 20:01:50 +0000
@@ -71,6 +71,17 @@
         self.assertTrue(b.tags.has_tag('tag-name'))
         self.assertFalse(b.tags.has_tag('imaginary'))
 
+    def test_reverse_tag_dict(self):
+        b = self.make_branch('b')
+        b.tags.set_tag('tag-name', 'target-revid-1')
+        b.tags.set_tag('other-name', 'target-revid-2')
+        # then reopen the branch and check reverse map id->tags list
+        b = Branch.open('b')
+        self.assertEqual(b.tags.get_reverse_tag_dict(),
+            {'target-revid-1': ['tag-name'],
+             'target-revid-2': ['other-name'],
+            })
+
     def test_no_such_tag(self):
         b = self.make_branch('b')
         try:




More information about the bazaar-commits mailing list