[PATCH 01 of 14 clfilter part 1 V2] revlog: allows reverse iteration with revlog.revs
pierre-yves.david at logilab.fr
pierre-yves.david at logilab.fr
Mon Nov 26 18:34:34 UTC 2012
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1353454925 -3600
# Node ID 62dbc1a20f51a76421b0362da0227ff8e5460a3a
# Parent d0d99c8bdf51a462bebc80e36a07576e58fc74c6
revlog: allows reverse iteration with revlog.revs
revlog.revs replace several iteration in reverse order. This changeset make is
possible to do so in order to avoid costly reverse or reversed() call.
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -255,15 +255,18 @@ class revlog(object):
return len(self.index) - 1
def __iter__(self):
return iter(xrange(len(self)))
def revs(self, start=0, stop=None):
"""iterate over all rev in this revlog (from start to stop)"""
- if stop is None:
+ step = 1
+ if stop is not None:
+ if start > stop:
+ step = -1
+ stop += step
+ else:
stop = len(self)
- else:
- stop += 1
- return xrange(start, stop)
+ return xrange(start, stop, step)
@util.propertycache
def nodemap(self):
self.rev(self.node(0))
return self._nodecache
More information about the Mercurial-devel
mailing list