Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/cmdutil.py @ 11607:cc784ad8b3da
log: refactor: test for ranges inside filerevgen
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Sat, 03 Jul 2010 18:01:54 +0900 |
parents | 326ab8727a93 |
children | 183e63112698 |
comparison
equal
deleted
inserted
replaced
11606:326ab8727a93 | 11607:cc784ad8b3da |
---|---|
1049 # No files, no patterns. Display all revs. | 1049 # No files, no patterns. Display all revs. |
1050 wanted = set(revs) | 1050 wanted = set(revs) |
1051 copies = [] | 1051 copies = [] |
1052 | 1052 |
1053 if not slowpath: | 1053 if not slowpath: |
1054 minrev, maxrev = min(revs), max(revs) | |
1054 # Only files, no patterns. Check the history of each file. | 1055 # Only files, no patterns. Check the history of each file. |
1055 def filerevgen(filelog, last): | 1056 def filerevgen(filelog, last): |
1056 cl_count = len(repo) | 1057 cl_count = len(repo) |
1057 for i, window in increasing_windows(last, nullrev): | 1058 for i, window in increasing_windows(last, nullrev): |
1058 revs = [] | 1059 revs = [] |
1059 for j in xrange(i - window, i + 1): | 1060 for j in xrange(i - window, i + 1): |
1060 n = filelog.node(j) | 1061 n = filelog.node(j) |
1061 revs.append((filelog.linkrev(j), | 1062 revs.append((filelog.linkrev(j), |
1062 follow and filelog.renamed(n))) | 1063 follow and filelog.renamed(n))) |
1063 for rev in reversed(revs): | 1064 for rev in reversed(revs): |
1065 linkrev = rev[0] | |
1066 if linkrev > maxrev: | |
1067 continue | |
1068 if linkrev < minrev: | |
1069 return | |
1064 # only yield rev for which we have the changelog, it can | 1070 # only yield rev for which we have the changelog, it can |
1065 # happen while doing "hg log" during a pull or commit | 1071 # happen while doing "hg log" during a pull or commit |
1066 if rev[0] < cl_count: | 1072 if linkrev < cl_count: |
1067 yield rev | 1073 yield rev |
1068 def iterfiles(): | 1074 def iterfiles(): |
1069 for filename in match.files(): | 1075 for filename in match.files(): |
1070 yield filename, None | 1076 yield filename, None |
1071 for filename_node in copies: | 1077 for filename_node in copies: |
1072 yield filename_node | 1078 yield filename_node |
1073 minrev, maxrev = min(revs), max(revs) | |
1074 for file_, node in iterfiles(): | 1079 for file_, node in iterfiles(): |
1075 filelog = repo.file(file_) | 1080 filelog = repo.file(file_) |
1076 if not len(filelog): | 1081 if not len(filelog): |
1077 if node is None: | 1082 if node is None: |
1078 # A zero count may be a directory or deleted file, so | 1083 # A zero count may be a directory or deleted file, so |
1089 last = len(filelog) - 1 | 1094 last = len(filelog) - 1 |
1090 else: | 1095 else: |
1091 last = filelog.rev(node) | 1096 last = filelog.rev(node) |
1092 | 1097 |
1093 for rev, copied in filerevgen(filelog, last): | 1098 for rev, copied in filerevgen(filelog, last): |
1094 if rev <= maxrev: | 1099 fncache.setdefault(rev, []) |
1095 if rev < minrev: | 1100 fncache[rev].append(file_) |
1096 break | 1101 wanted.add(rev) |
1097 fncache.setdefault(rev, []) | 1102 if copied: |
1098 fncache[rev].append(file_) | 1103 copies.append(copied) |
1099 wanted.add(rev) | |
1100 if copied: | |
1101 copies.append(copied) | |
1102 if slowpath: | 1104 if slowpath: |
1103 if follow: | 1105 if follow: |
1104 raise util.Abort(_('can only follow copies/renames for explicit ' | 1106 raise util.Abort(_('can only follow copies/renames for explicit ' |
1105 'filenames')) | 1107 'filenames')) |
1106 | 1108 |