equal
deleted
inserted
replaced
956 (rev, util.datestr(results[rev]))) |
956 (rev, util.datestr(results[rev]))) |
957 return str(rev) |
957 return str(rev) |
958 |
958 |
959 raise util.Abort(_("revision matching date not found")) |
959 raise util.Abort(_("revision matching date not found")) |
960 |
960 |
|
961 def increasingwindows(start, end, windowsize=8, sizelimit=512): |
|
962 if start < end: |
|
963 while start < end: |
|
964 yield start, min(windowsize, end - start) |
|
965 start += windowsize |
|
966 if windowsize < sizelimit: |
|
967 windowsize *= 2 |
|
968 else: |
|
969 while start > end: |
|
970 yield start, min(windowsize, start - end - 1) |
|
971 start -= windowsize |
|
972 if windowsize < sizelimit: |
|
973 windowsize *= 2 |
|
974 |
961 def walkchangerevs(repo, match, opts, prepare): |
975 def walkchangerevs(repo, match, opts, prepare): |
962 '''Iterate over files and the revs in which they changed. |
976 '''Iterate over files and the revs in which they changed. |
963 |
977 |
964 Callers most commonly need to iterate backwards over the history |
978 Callers most commonly need to iterate backwards over the history |
965 in which they are interested. Doing so has awful (quadratic-looking) |
979 in which they are interested. Doing so has awful (quadratic-looking) |
970 order (usually backwards) to display it. |
984 order (usually backwards) to display it. |
971 |
985 |
972 This function returns an iterator yielding contexts. Before |
986 This function returns an iterator yielding contexts. Before |
973 yielding each context, the iterator will first call the prepare |
987 yielding each context, the iterator will first call the prepare |
974 function on each context in the window in forward order.''' |
988 function on each context in the window in forward order.''' |
975 |
|
976 def increasing_windows(start, end, windowsize=8, sizelimit=512): |
|
977 if start < end: |
|
978 while start < end: |
|
979 yield start, min(windowsize, end - start) |
|
980 start += windowsize |
|
981 if windowsize < sizelimit: |
|
982 windowsize *= 2 |
|
983 else: |
|
984 while start > end: |
|
985 yield start, min(windowsize, start - end - 1) |
|
986 start -= windowsize |
|
987 if windowsize < sizelimit: |
|
988 windowsize *= 2 |
|
989 |
989 |
990 follow = opts.get('follow') or opts.get('follow_first') |
990 follow = opts.get('follow') or opts.get('follow_first') |
991 |
991 |
992 if not len(repo): |
992 if not len(repo): |
993 return [] |
993 return [] |
1174 return ff.match(rev) and rev in wanted |
1174 return ff.match(rev) and rev in wanted |
1175 else: |
1175 else: |
1176 def want(rev): |
1176 def want(rev): |
1177 return rev in wanted |
1177 return rev in wanted |
1178 |
1178 |
1179 for i, window in increasing_windows(0, len(revs)): |
1179 for i, window in increasingwindows(0, len(revs)): |
1180 nrevs = [rev for rev in revs[i:i + window] if want(rev)] |
1180 nrevs = [rev for rev in revs[i:i + window] if want(rev)] |
1181 for rev in sorted(nrevs): |
1181 for rev in sorted(nrevs): |
1182 fns = fncache.get(rev) |
1182 fns = fncache.get(rev) |
1183 ctx = change(rev) |
1183 ctx = change(rev) |
1184 if not fns: |
1184 if not fns: |