Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/cmdutil.py @ 9367:1ef630452e0b
cmdutil: use context objects for walkchangerevs()
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Thu, 20 Aug 2009 08:34:22 +0200 |
parents | 78e54b9f3a62 |
children | ae88c721f916 |
comparison
equal
deleted
inserted
replaced
9366:9ff178e7b627 | 9367:1ef630452e0b |
---|---|
985 return t | 985 return t |
986 | 986 |
987 def finddate(ui, repo, date): | 987 def finddate(ui, repo, date): |
988 """Find the tipmost changeset that matches the given date spec""" | 988 """Find the tipmost changeset that matches the given date spec""" |
989 df = util.matchdate(date) | 989 df = util.matchdate(date) |
990 get = util.cachefunc(lambda r: repo[r].changeset()) | 990 get = util.cachefunc(lambda r: repo[r]) |
991 changeiter, matchfn = walkchangerevs(ui, repo, [], get, {'rev':None}) | 991 changeiter, matchfn = walkchangerevs(ui, repo, [], get, {'rev':None}) |
992 results = {} | 992 results = {} |
993 for st, rev, fns in changeiter: | 993 for st, rev, fns in changeiter: |
994 if st == 'add': | 994 if st == 'add': |
995 d = get(rev)[2] | 995 d = get(rev).date() |
996 if df(d[0]): | 996 if df(d[0]): |
997 results[rev] = d | 997 results[rev] = d |
998 elif st == 'iter': | 998 elif st == 'iter': |
999 if rev in results: | 999 if rev in results: |
1000 ui.status(_("Found revision %s from %s\n") % | 1000 ui.status(_("Found revision %s from %s\n") % |
1116 | 1116 |
1117 # The slow path checks files modified in every changeset. | 1117 # The slow path checks files modified in every changeset. |
1118 def changerevgen(): | 1118 def changerevgen(): |
1119 for i, window in increasing_windows(len(repo) - 1, nullrev): | 1119 for i, window in increasing_windows(len(repo) - 1, nullrev): |
1120 for j in xrange(i - window, i + 1): | 1120 for j in xrange(i - window, i + 1): |
1121 yield j, change(j)[3] | 1121 yield change(j) |
1122 | 1122 |
1123 for rev, changefiles in changerevgen(): | 1123 for ctx in changerevgen(): |
1124 matches = filter(m, changefiles) | 1124 matches = filter(m, ctx.files()) |
1125 if matches: | 1125 if matches: |
1126 fncache[rev] = matches | 1126 fncache[ctx.rev()] = matches |
1127 wanted.add(rev) | 1127 wanted.add(ctx.rev()) |
1128 | 1128 |
1129 class followfilter(object): | 1129 class followfilter(object): |
1130 def __init__(self, onlyfirst=False): | 1130 def __init__(self, onlyfirst=False): |
1131 self.startrev = nullrev | 1131 self.startrev = nullrev |
1132 self.roots = [] | 1132 self.roots = [] |
1187 nrevs = [rev for rev in revs[i:i+window] if want(rev)] | 1187 nrevs = [rev for rev in revs[i:i+window] if want(rev)] |
1188 for rev in sorted(nrevs): | 1188 for rev in sorted(nrevs): |
1189 fns = fncache.get(rev) | 1189 fns = fncache.get(rev) |
1190 if not fns: | 1190 if not fns: |
1191 def fns_generator(): | 1191 def fns_generator(): |
1192 for f in change(rev)[3]: | 1192 for f in change(rev).files(): |
1193 if m(f): | 1193 if m(f): |
1194 yield f | 1194 yield f |
1195 fns = fns_generator() | 1195 fns = fns_generator() |
1196 yield 'add', rev, fns | 1196 yield 'add', rev, fns |
1197 for rev in nrevs: | 1197 for rev in nrevs: |