# HG changeset patch # User Matt Mackall # Date 1256680892 18000 # Node ID 6d7d3f8490622558523b368fe119458d8a39caaa # Parent 96fe91be9c1e763fef7f43d1a3c08b8130d58caf walkchangerevs: internalize ctx caching diff -r 96fe91be9c1e -r 6d7d3f849062 hgext/churn.py --- a/hgext/churn.py Sun Oct 25 18:43:59 2009 -0500 +++ b/hgext/churn.py Tue Oct 27 17:01:32 2009 -0500 @@ -53,9 +53,8 @@ if opts.get('date'): df = util.matchdate(opts['date']) - get = util.cachefunc(lambda r: repo[r]) m = cmdutil.match(repo, pats, opts) - for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, m, get, opts): + for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, m, opts): if not st == 'add': continue diff -r 96fe91be9c1e -r 6d7d3f849062 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Sun Oct 25 18:43:59 2009 -0500 +++ b/mercurial/cmdutil.py Tue Oct 27 17:01:32 2009 -0500 @@ -1039,7 +1039,7 @@ raise util.Abort(_("revision matching date not found")) -def walkchangerevs(ui, repo, match, change, opts): +def walkchangerevs(ui, repo, match, opts): '''Iterate over files and the revs in which they changed. Callers most commonly need to iterate backwards over the history @@ -1087,6 +1087,7 @@ wanted = set() slowpath = match.anypats() or (match.files() and opts.get('removed')) fncache = {} + change = util.cachefunc(repo.changectx) if not slowpath and not match.files(): # No files, no patterns. Display all revs. diff -r 96fe91be9c1e -r 6d7d3f849062 mercurial/commands.py --- a/mercurial/commands.py Sun Oct 25 18:43:59 2009 -0500 +++ b/mercurial/commands.py Tue Oct 27 17:01:32 2009 -0500 @@ -1257,7 +1257,8 @@ for i in xrange(blo, bhi): yield ('+', b[i]) - def display(fn, r, pstates, states): + def display(fn, ctx, pstates, states): + rev = ctx.rev() datefunc = ui.quiet and util.shortdate or util.datestr found = False filerevmatches = {} @@ -1266,17 +1267,17 @@ else: iter = [('', l) for l in states] for change, l in iter: - cols = [fn, str(r)] + cols = [fn, str(rev)] if opts.get('line_number'): cols.append(str(l.linenum)) if opts.get('all'): cols.append(change) if opts.get('user'): - cols.append(ui.shortuser(get(r).user())) + cols.append(ui.shortuser(ctx.user())) if opts.get('date'): - cols.append(datefunc(get(r).date())) + cols.append(datefunc(ctx.date())) if opts.get('files_with_matches'): - c = (fn, r) + c = (fn, rev) if c in filerevmatches: continue filerevmatches[c] = 1 @@ -1288,11 +1289,10 @@ skip = {} revfiles = {} - get = util.cachefunc(lambda r: repo[r]) matchfn = cmdutil.match(repo, pats, opts) found = False follow = opts.get('follow') - for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, matchfn, get, opts): + for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, matchfn, opts): if st == 'add': rev = ctx.rev() pctx = ctx.parents()[0] @@ -1329,7 +1329,7 @@ pass elif st == 'iter': rev = ctx.rev() - parent = get(rev).parents()[0].rev() + parent = ctx.parents()[0].rev() for fn in sorted(revfiles.get(rev, [])): states = matches[rev][fn] copy = copies.get(rev, {}).get(fn) @@ -1339,7 +1339,7 @@ continue pstates = matches.get(parent, {}).get(copy or fn, []) if pstates or states: - r = display(fn, rev, pstates, states) + r = display(fn, ctx, pstates, states) found = found or r if r and not opts.get('all'): skip[fn] = True @@ -1979,7 +1979,6 @@ will appear in files:. """ - get = util.cachefunc(lambda r: repo[r]) matchfn = cmdutil.match(repo, pats, opts) limit = cmdutil.loglimit(opts) count = 0 @@ -2027,9 +2026,9 @@ only_branches = opts.get('only_branch') displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn) - for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, matchfn, get, opts): + for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, matchfn, opts): + rev = ctx.rev() if st == 'add': - rev = ctx.rev() parents = [p for p in repo.changelog.parentrevs(rev) if p != nullrev] if opts.get('no_merges') and len(parents) == 2: @@ -2069,7 +2068,8 @@ elif st == 'iter': if count == limit: break - if displayer.flush(ctx.rev()): + + if displayer.flush(rev): count += 1 def manifest(ui, repo, node=None, rev=None):