Rev 6164: Bah, if the range X..Y is not such that X <= Y, bzr tags just output *nothing* as per bb.test_tags.TestTagging.test_list_tags_revision_filtering. in file:///home/vila/src/bzr/bugs/857335-tags-revs-slow/

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Sep 23 15:30:59 UTC 2011


At file:///home/vila/src/bzr/bugs/857335-tags-revs-slow/

------------------------------------------------------------
revno: 6164
revision-id: v.ladeuil+lp at free.fr-20110923153059-jlgy69j2nb3fmtn6
parent: v.ladeuil+lp at free.fr-20110923141536-pvorifvebpndrbnl
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: 857335-tags-revs-slow
timestamp: Fri 2011-09-23 17:30:59 +0200
message:
  Bah, if the range X..Y is not such that X <= Y, bzr tags just output *nothing* as per bb.test_tags.TestTagging.test_list_tags_revision_filtering.
-------------- next part --------------
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py	2011-09-23 14:15:36 +0000
+++ b/bzrlib/builtins.py	2011-09-23 15:30:59 +0000
@@ -5752,18 +5752,32 @@
 
         self.add_cleanup(branch.lock_read().unlock)
         if revision:
+            range_valid = True
             rev1, rev2 = _get_revision_range(revision, branch, self.name())
             revid1, revid2 = rev1.rev_id, rev2.rev_id
-            tagged_revids = branch.tags.get_reverse_tag_dict()
-            # only show revisions between revid1 and revid2 (inclusive)
-            found = []
-            for r in branch.iter_merge_sorted_revisions(
-                start_revision_id=revid2, stop_revision_id=revid1,
-                stop_rule='include'):
-                revid_tags = tagged_revids.get(r[0], None)
-                if revid_tags:
-                    found.extend([(tag, r[0]) for tag in revid_tags])
-            tags = found
+            # _get_revision_range will always set revid2 if it's not specified.
+            # If revid1 is None, it means we want to start from the branch
+            # origin which is always a valid ancestor. If revid1 == revid2, the
+            # ancestry check is useless.
+            if revid1 and revid1 != revid2:
+                # FIXME: We really want to use the same graph than
+                # branch.iter_merge_sorted_revisions below, but this is not
+                # easily available -- vila 2011-09-23
+                if branch.repository.get_graph().is_ancestor(revid2, revid1):
+                    # We don't want to ouput anything in this case...
+                    tags = []
+                    range_valid = False
+            if range_valid:
+                tagged_revids = branch.tags.get_reverse_tag_dict()
+                # only show revisions between revid1 and revid2 (inclusive)
+                found = []
+                for r in branch.iter_merge_sorted_revisions(
+                    start_revision_id=revid2, stop_revision_id=revid1,
+                    stop_rule='include'):
+                    revid_tags = tagged_revids.get(r[0], None)
+                    if revid_tags:
+                        found.extend([(tag, r[0]) for tag in revid_tags])
+                tags = found
         if sort is None:
             sort = tag_sort_methods.get()
         sort(branch, tags)



More information about the bazaar-commits mailing list