equal
deleted
inserted
replaced
124 end = None |
124 end = None |
125 if len(revs) == 1: |
125 if len(revs) == 1: |
126 if revrangesep in revs[0]: |
126 if revrangesep in revs[0]: |
127 start, end = revs[0].split(revrangesep, 1) |
127 start, end = revs[0].split(revrangesep, 1) |
128 start = revfix(repo, start, 0) |
128 start = revfix(repo, start, 0) |
129 end = revfix(repo, end, repo.changelog.count() - 1) |
129 end = revfix(repo, end, len(repo) - 1) |
130 else: |
130 else: |
131 start = revfix(repo, revs[0], None) |
131 start = revfix(repo, revs[0], None) |
132 elif len(revs) == 2: |
132 elif len(revs) == 2: |
133 if revrangesep in revs[0] or revrangesep in revs[1]: |
133 if revrangesep in revs[0] or revrangesep in revs[1]: |
134 raise util.Abort(_('too many revisions specified')) |
134 raise util.Abort(_('too many revisions specified')) |
149 seen, l = {}, [] |
149 seen, l = {}, [] |
150 for spec in revs: |
150 for spec in revs: |
151 if revrangesep in spec: |
151 if revrangesep in spec: |
152 start, end = spec.split(revrangesep, 1) |
152 start, end = spec.split(revrangesep, 1) |
153 start = revfix(repo, start, 0) |
153 start = revfix(repo, start, 0) |
154 end = revfix(repo, end, repo.changelog.count() - 1) |
154 end = revfix(repo, end, len(repo) - 1) |
155 step = start > end and -1 or 1 |
155 step = start > end and -1 or 1 |
156 for rev in xrange(start, end+step, step): |
156 for rev in xrange(start, end+step, step): |
157 if rev in seen: |
157 if rev in seen: |
158 continue |
158 continue |
159 seen[rev] = 1 |
159 seen[rev] = 1 |
986 windowsize *= 2 |
986 windowsize *= 2 |
987 |
987 |
988 m = match(repo, pats, opts) |
988 m = match(repo, pats, opts) |
989 follow = opts.get('follow') or opts.get('follow_first') |
989 follow = opts.get('follow') or opts.get('follow_first') |
990 |
990 |
991 if repo.changelog.count() == 0: |
991 if not len(repo): |
992 return [], m |
992 return [], m |
993 |
993 |
994 if follow: |
994 if follow: |
995 defrange = '%s:0' % repo['.'].rev() |
995 defrange = '%s:0' % repo['.'].rev() |
996 else: |
996 else: |
1005 wanted = dict.fromkeys(revs) |
1005 wanted = dict.fromkeys(revs) |
1006 copies = [] |
1006 copies = [] |
1007 if not slowpath: |
1007 if not slowpath: |
1008 # Only files, no patterns. Check the history of each file. |
1008 # Only files, no patterns. Check the history of each file. |
1009 def filerevgen(filelog, node): |
1009 def filerevgen(filelog, node): |
1010 cl_count = repo.changelog.count() |
1010 cl_count = len(repo) |
1011 if node is None: |
1011 if node is None: |
1012 last = filelog.count() - 1 |
1012 last = len(filelog) - 1 |
1013 else: |
1013 else: |
1014 last = filelog.rev(node) |
1014 last = filelog.rev(node) |
1015 for i, window in increasing_windows(last, nullrev): |
1015 for i, window in increasing_windows(last, nullrev): |
1016 revs = [] |
1016 revs = [] |
1017 for j in xrange(i - window, i + 1): |
1017 for j in xrange(i - window, i + 1): |
1030 for filename_node in copies: |
1030 for filename_node in copies: |
1031 yield filename_node |
1031 yield filename_node |
1032 minrev, maxrev = min(revs), max(revs) |
1032 minrev, maxrev = min(revs), max(revs) |
1033 for file_, node in iterfiles(): |
1033 for file_, node in iterfiles(): |
1034 filelog = repo.file(file_) |
1034 filelog = repo.file(file_) |
1035 if filelog.count() == 0: |
1035 if not len(filelog): |
1036 if node is None: |
1036 if node is None: |
1037 # A zero count may be a directory or deleted file, so |
1037 # A zero count may be a directory or deleted file, so |
1038 # try to find matching entries on the slow path. |
1038 # try to find matching entries on the slow path. |
1039 slowpath = True |
1039 slowpath = True |
1040 break |
1040 break |
1056 raise util.Abort(_('can only follow copies/renames for explicit ' |
1056 raise util.Abort(_('can only follow copies/renames for explicit ' |
1057 'file names')) |
1057 'file names')) |
1058 |
1058 |
1059 # The slow path checks files modified in every changeset. |
1059 # The slow path checks files modified in every changeset. |
1060 def changerevgen(): |
1060 def changerevgen(): |
1061 for i, window in increasing_windows(repo.changelog.count()-1, |
1061 for i, window in increasing_windows(len(repo) - 1, nullrev): |
1062 nullrev): |
|
1063 for j in xrange(i - window, i + 1): |
1062 for j in xrange(i - window, i + 1): |
1064 yield j, change(j)[3] |
1063 yield j, change(j)[3] |
1065 |
1064 |
1066 for rev, changefiles in changerevgen(): |
1065 for rev, changefiles in changerevgen(): |
1067 matches = filter(m, changefiles) |
1066 matches = filter(m, changefiles) |