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: