cmdutil: extract increasing_windows() from walkchangerevs()
It will be reused in the revset-based version.
--- a/mercurial/cmdutil.py Sat May 19 09:34:25 2012 -0500
+++ b/mercurial/cmdutil.py Tue May 08 22:43:44 2012 +0200
@@ -958,6 +958,20 @@
raise util.Abort(_("revision matching date not found"))
+def increasingwindows(start, end, windowsize=8, sizelimit=512):
+ if start < end:
+ while start < end:
+ yield start, min(windowsize, end - start)
+ start += windowsize
+ if windowsize < sizelimit:
+ windowsize *= 2
+ else:
+ while start > end:
+ yield start, min(windowsize, start - end - 1)
+ start -= windowsize
+ if windowsize < sizelimit:
+ windowsize *= 2
+
def walkchangerevs(repo, match, opts, prepare):
'''Iterate over files and the revs in which they changed.
@@ -973,20 +987,6 @@
yielding each context, the iterator will first call the prepare
function on each context in the window in forward order.'''
- def increasing_windows(start, end, windowsize=8, sizelimit=512):
- if start < end:
- while start < end:
- yield start, min(windowsize, end - start)
- start += windowsize
- if windowsize < sizelimit:
- windowsize *= 2
- else:
- while start > end:
- yield start, min(windowsize, start - end - 1)
- start -= windowsize
- if windowsize < sizelimit:
- windowsize *= 2
-
follow = opts.get('follow') or opts.get('follow_first')
if not len(repo):
@@ -1176,7 +1176,7 @@
def want(rev):
return rev in wanted
- for i, window in increasing_windows(0, len(revs)):
+ for i, window in increasingwindows(0, len(revs)):
nrevs = [rev for rev in revs[i:i + window] if want(rev)]
for rev in sorted(nrevs):
fns = fncache.get(rev)