Rev 4868: (igc) Fix logging too much (Marius Kruger, #325618, #484109) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Fri Dec 4 23:17:36 GMT 2009


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

------------------------------------------------------------
revno: 4868 [merge]
revision-id: pqm at pqm.ubuntu.com-20091204231732-nbilalcmsekhl3li
parent: pqm at pqm.ubuntu.com-20091204214417-6qro8gecchba1s82
parent: ian.clatworthy at canonical.com-20091204221352-5ky1o5d31kqkvbge
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2009-12-04 23:17:32 +0000
message:
  (igc) Fix logging too much (Marius Kruger, #325618, #484109)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
  bzrlib/tests/blackbox/test_log.py test_log.py-20060112090212-78f6ea560c868e24
  bzrlib/tests/per_branch/test_iter_merge_sorted_revisions.py test_merge_sorted_re-20090121004847-to3gvjwigstu93eh-1
=== modified file 'NEWS'
--- a/NEWS	2009-12-04 17:06:17 +0000
+++ b/NEWS	2009-12-04 22:13:52 +0000
@@ -42,6 +42,9 @@
 
 * ``bzr ignore /`` no longer causes an IndexError. (Gorder Tyler, #456036)
 
+* ``bzr log -n0 -rN`` should not return revisions beyond its merged revisions.
+  (#325618, #484109, Marius Kruger)
+
 * ``bzr mv --quiet`` really is quiet now.  (Gordon Tyler, #271790)
 
 * ``bzr serve`` is more clear about the risk of supplying --allow-writes.

=== modified file 'bzrlib/branch.py'
--- a/bzrlib/branch.py	2009-12-03 02:24:54 +0000
+++ b/bzrlib/branch.py	2009-12-04 22:13:52 +0000
@@ -503,12 +503,25 @@
                 left_parent = stop_rev.parent_ids[0]
             else:
                 left_parent = _mod_revision.NULL_REVISION
+            # left_parent is the actual revision we want to stop logging at,
+            # since we want to show the merged revisions after the stop_rev too
+            reached_stop_revision_id = False
+            revision_id_whitelist = []
             for node in rev_iter:
                 rev_id = node.key[-1]
                 if rev_id == left_parent:
+                    # reached the left parent after the stop_revision
                     return
-                yield (rev_id, node.merge_depth, node.revno,
+                if (not reached_stop_revision_id or
+                        rev_id in revision_id_whitelist):
+                    yield (rev_id, node.merge_depth, node.revno,
                        node.end_of_merge)
+                    if reached_stop_revision_id or rev_id == stop_revision_id:
+                        # only do the merged revs of rev_id from now on
+                        rev = self.repository.get_revision(rev_id)
+                        if rev.parent_ids:
+                            reached_stop_revision_id = True
+                            revision_id_whitelist.extend(rev.parent_ids)
         else:
             raise ValueError('invalid stop_rule %r' % stop_rule)
 

=== modified file 'bzrlib/tests/blackbox/test_log.py'
--- a/bzrlib/tests/blackbox/test_log.py	2009-06-10 03:56:49 +0000
+++ b/bzrlib/tests/blackbox/test_log.py	2009-11-01 03:45:20 +0000
@@ -536,6 +536,21 @@
 """
         self.check_log(expected, ['-n0', '-r1.1.1..1.1.2'])
 
+    def test_merges_partial_range_ignore_before_lower_bound(self):
+        """Dont show revisions before the lower bound's merged revs"""
+        expected = """\
+    2 Lorem Ipsum\t2005-11-22 [merge]
+      merge branch level1
+
+          1.1.2 Lorem Ipsum\t2005-11-22 [merge]
+                merge branch level2
+
+              1.2.1 Lorem Ipsum\t2005-11-22
+                    in branch level2
+
+"""
+        self.check_log(expected, ['--short', '-n0', '-r1.1.2..2'])
+
 
 class TestLogDiff(TestLog):
 

=== modified file 'bzrlib/tests/per_branch/test_iter_merge_sorted_revisions.py'
--- a/bzrlib/tests/per_branch/test_iter_merge_sorted_revisions.py	2009-07-10 05:49:34 +0000
+++ b/bzrlib/tests/per_branch/test_iter_merge_sorted_revisions.py	2009-12-03 23:34:38 +0000
@@ -84,6 +84,28 @@
             ], list(the_branch.iter_merge_sorted_revisions(
                 stop_revision_id='rev-3', stop_rule='with-merges')))
 
+    def test_merge_sorted_range_stop_with_merges_can_show_non_parents(self):
+        tree = self.create_tree_with_merge()
+        the_branch = tree.bzrdir.open_branch()
+        # rev-1.1.1 gets logged before the end revision is reached.
+        # so it is returned even though rev-1.1.1 is not a parent of rev-2.
+        self.assertEqual([
+            ('rev-3', 0, (3,), False),
+            ('rev-1.1.1', 1, (1,1,1), True),
+            ('rev-2', 0, (2,), False),
+            ], list(the_branch.iter_merge_sorted_revisions(
+                stop_revision_id='rev-2', stop_rule='with-merges')))
+
+    def test_merge_sorted_range_stop_with_merges_ignore_non_parents(self):
+        tree = self.create_tree_with_merge()
+        the_branch = tree.bzrdir.open_branch()
+        # rev-2 is not a parent of rev-1.1.1 so it must not be returned
+        self.assertEqual([
+            ('rev-3', 0, (3,), False),
+            ('rev-1.1.1', 1, (1,1,1), True),
+            ], list(the_branch.iter_merge_sorted_revisions(
+                stop_revision_id='rev-1.1.1', stop_rule='with-merges')))
+
     def test_merge_sorted_single_stop_exclude(self):
         # from X..X exclusive is an empty result
         tree = self.create_tree_with_merge()




More information about the bazaar-commits mailing list