# HG changeset patch # User Nicolas Dumazet # Date 2010-07-03 09:01:54 # Node ID cc784ad8b3da99bf7240fabfa2986c86df908f46 # Parent 326ab8727a9354e1c07a3573292c07d305841eab log: refactor: test for ranges inside filerevgen diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -1051,6 +1051,7 @@ def walkchangerevs(repo, match, opts, pr copies = [] if not slowpath: + minrev, maxrev = min(revs), max(revs) # Only files, no patterns. Check the history of each file. def filerevgen(filelog, last): cl_count = len(repo) @@ -1061,16 +1062,20 @@ def walkchangerevs(repo, match, opts, pr revs.append((filelog.linkrev(j), follow and filelog.renamed(n))) for rev in reversed(revs): + linkrev = rev[0] + if linkrev > maxrev: + continue + if linkrev < minrev: + return # only yield rev for which we have the changelog, it can # happen while doing "hg log" during a pull or commit - if rev[0] < cl_count: + if linkrev < cl_count: yield rev def iterfiles(): for filename in match.files(): yield filename, None for filename_node in copies: yield filename_node - minrev, maxrev = min(revs), max(revs) for file_, node in iterfiles(): filelog = repo.file(file_) if not len(filelog): @@ -1091,14 +1096,11 @@ def walkchangerevs(repo, match, opts, pr last = filelog.rev(node) for rev, copied in filerevgen(filelog, last): - if rev <= maxrev: - if rev < minrev: - break - fncache.setdefault(rev, []) - fncache[rev].append(file_) - wanted.add(rev) - if copied: - copies.append(copied) + fncache.setdefault(rev, []) + fncache[rev].append(file_) + wanted.add(rev) + if copied: + copies.append(copied) if slowpath: if follow: raise util.Abort(_('can only follow copies/renames for explicit '