[PATCH 01 of 27 clfilter V2] clfilter: remove usage of `range` and `xrange` in `scmutil.revrange`

Pierre-Yves David pierre-yves.david at ens-lyon.org
Mon Oct 8 16:37:52 CDT 2012


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1349703195 -7200
# Node ID 3eb798404dbe22c6f6aa552d4196a1af5370d3a9
# Parent  004bd533880dc33b2aa8e41816a1eb59b47d9045
clfilter: remove usage of `range` and `xrange` in `scmutil.revrange`

For changelog level filtering to take effect it need to be used for any
iteration.

This changeset removes usage of `range` and `xrange` that survived the first
pass.

diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -614,13 +614,19 @@
                 start, end = spec.split(_revrangesep, 1)
                 start = revfix(repo, start, 0)
                 end = revfix(repo, end, len(repo) - 1)
-                step = start > end and -1 or 1
+                reverse = False
+                if start > end:
+                    start, end = end, start
+                    reverse = True
+                rangeiter = repo.changelog.revs(start, end)
                 if not seen and not l:
                     # by far the most common case: revs = ["-1:0"]
-                    l = range(start, end + step, step)
+                    l = list(rangeiter)
+                    if reverse:
+                        l.reverse()
                     # defer syncing seen until next iteration
                     continue
-                newrevs = set(xrange(start, end + step, step))
+                newrevs = set(rangeiter)
                 if seen:
                     newrevs.difference_update(seen)
                     seen.update(newrevs)


More information about the Mercurial-devel mailing list