[PATCH 1 of 8 filtering] revlog: allows reverse iteration with revlog.revs
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue Nov 20 18:11:33 CST 2012
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at logilab.fr>
# Date 1353454925 -3600
# Node ID deb7a59af85a0827bc5ea7501bb1ea58a1752e69
# Parent 49c85541617baff9fea11ae3af55dee15bde2573
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