##// END OF EJS Templates
walkchangerevs: move 'add' to callback...
Matt Mackall -
r9662:f3d60543 default
parent child Browse files
Show More
@@ -54,13 +54,10 b' def countrate(ui, repo, amap, *pats, **o'
54 df = util.matchdate(opts['date'])
54 df = util.matchdate(opts['date'])
55
55
56 m = cmdutil.match(repo, pats, opts)
56 m = cmdutil.match(repo, pats, opts)
57 for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, m, opts):
57 def prep(ctx, fns):
58 if not st == 'add':
59 continue
60
61 rev = ctx.rev()
58 rev = ctx.rev()
62 if df and not df(ctx.date()[0]): # doesn't match date format
59 if df and not df(ctx.date()[0]): # doesn't match date format
63 continue
60 return
64
61
65 key = getkey(ctx)
62 key = getkey(ctx)
66 key = amap.get(key, key) # alias remap
63 key = amap.get(key, key) # alias remap
@@ -70,7 +67,7 b' def countrate(ui, repo, amap, *pats, **o'
70 parents = ctx.parents()
67 parents = ctx.parents()
71 if len(parents) > 1:
68 if len(parents) > 1:
72 ui.note(_('Revision %d is a merge, ignoring...\n') % (rev,))
69 ui.note(_('Revision %d is a merge, ignoring...\n') % (rev,))
73 continue
70 return
74
71
75 ctx1 = parents[0]
72 ctx1 = parents[0]
76 lines = changedlines(ui, repo, ctx1, ctx, fns)
73 lines = changedlines(ui, repo, ctx1, ctx, fns)
@@ -84,6 +81,9 b' def countrate(ui, repo, amap, *pats, **o'
84 ui.write("\r" + _("generating stats: %d%%") % pct)
81 ui.write("\r" + _("generating stats: %d%%") % pct)
85 sys.stdout.flush()
82 sys.stdout.flush()
86
83
84 for ctx in cmdutil.walkchangerevs(ui, repo, m, opts, prep):
85 continue
86
87 if opts.get('progress'):
87 if opts.get('progress'):
88 ui.write("\r")
88 ui.write("\r")
89 sys.stdout.flush()
89 sys.stdout.flush()
@@ -1023,15 +1023,16 b' def show_changeset(ui, repo, opts, buffe'
1023 def finddate(ui, repo, date):
1023 def finddate(ui, repo, date):
1024 """Find the tipmost changeset that matches the given date spec"""
1024 """Find the tipmost changeset that matches the given date spec"""
1025 df = util.matchdate(date)
1025 df = util.matchdate(date)
1026 get = util.cachefunc(lambda r: repo[r])
1027 m = matchall(repo)
1026 m = matchall(repo)
1028 results = {}
1027 results = {}
1029 for st, rev, fns in walkchangerevs(ui, repo, m, get, {'rev':None}):
1028
1030 if st == 'add':
1029 def prep(ctx, fns):
1031 d = get(rev).date()
1030 d = ctx.date()
1032 if df(d[0]):
1031 if df(d[0]):
1033 results[rev] = d
1032 results[rev] = d
1034 elif st == 'iter':
1033
1034 for ctx in walkchangerevs(ui, repo, m, {'rev':None}, prep):
1035 rev = ctx.rev()
1035 if rev in results:
1036 if rev in results:
1036 ui.status(_("Found revision %s from %s\n") %
1037 ui.status(_("Found revision %s from %s\n") %
1037 (rev, util.datestr(results[rev])))
1038 (rev, util.datestr(results[rev])))
@@ -1039,7 +1040,7 b' def finddate(ui, repo, date):'
1039
1040
1040 raise util.Abort(_("revision matching date not found"))
1041 raise util.Abort(_("revision matching date not found"))
1041
1042
1042 def walkchangerevs(ui, repo, match, opts):
1043 def walkchangerevs(ui, repo, match, opts, prepare):
1043 '''Iterate over files and the revs in which they changed.
1044 '''Iterate over files and the revs in which they changed.
1044
1045
1045 Callers most commonly need to iterate backwards over the history
1046 Callers most commonly need to iterate backwards over the history
@@ -1050,15 +1051,9 b' def walkchangerevs(ui, repo, match, opts'
1050 window, we first walk forwards to gather data, then in the desired
1051 window, we first walk forwards to gather data, then in the desired
1051 order (usually backwards) to display it.
1052 order (usually backwards) to display it.
1052
1053
1053 This function returns an iterator. The iterator yields 3-tuples.
1054 This function returns an iterator yielding contexts. Before
1054 They will be of one of the following forms:
1055 yielding each context, the iterator will first call the prepare
1055
1056 function on each context in the window in forward order.'''
1056 "add", rev, fns: out-of-order traversal of the given filenames
1057 fns, which changed during revision rev - use to gather data for
1058 possible display
1059
1060 "iter", rev, None: in-order traversal of the revs earlier iterated
1061 over with "add" - use to display data'''
1062
1057
1063 def increasing_windows(start, end, windowsize=8, sizelimit=512):
1058 def increasing_windows(start, end, windowsize=8, sizelimit=512):
1064 if start < end:
1059 if start < end:
@@ -1225,9 +1220,9 b' def walkchangerevs(ui, repo, match, opts'
1225 if match(f):
1220 if match(f):
1226 yield f
1221 yield f
1227 fns = fns_generator()
1222 fns = fns_generator()
1228 yield 'add', ctx, fns
1223 prepare(ctx, fns)
1229 for rev in nrevs:
1224 for rev in nrevs:
1230 yield 'iter', change(rev), None
1225 yield change(rev)
1231 return iterate()
1226 return iterate()
1232
1227
1233 def commit(ui, repo, commitfunc, pats, opts):
1228 def commit(ui, repo, commitfunc, pats, opts):
@@ -1302,8 +1302,8 b' def grep(ui, repo, pattern, *pats, **opt'
1302 matchfn = cmdutil.match(repo, pats, opts)
1302 matchfn = cmdutil.match(repo, pats, opts)
1303 found = False
1303 found = False
1304 follow = opts.get('follow')
1304 follow = opts.get('follow')
1305 for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, matchfn, opts):
1305
1306 if st == 'add':
1306 def prep(ctx, fns):
1307 rev = ctx.rev()
1307 rev = ctx.rev()
1308 pctx = ctx.parents()[0]
1308 pctx = ctx.parents()[0]
1309 parent = pctx.rev()
1309 parent = pctx.rev()
@@ -1337,7 +1337,8 b' def grep(ui, repo, pattern, *pats, **opt'
1337 grepbody(pfn, parent, flog.read(fnode))
1337 grepbody(pfn, parent, flog.read(fnode))
1338 except error.LookupError:
1338 except error.LookupError:
1339 pass
1339 pass
1340 elif st == 'iter':
1340
1341 for ctx in cmdutil.walkchangerevs(ui, repo, matchfn, opts, prep):
1341 rev = ctx.rev()
1342 rev = ctx.rev()
1342 parent = ctx.parents()[0].rev()
1343 parent = ctx.parents()[0].rev()
1343 for fn in sorted(revfiles.get(rev, [])):
1344 for fn in sorted(revfiles.get(rev, [])):
@@ -2037,21 +2038,18 b' def log(ui, repo, *pats, **opts):'
2037 only_branches = opts.get('only_branch')
2038 only_branches = opts.get('only_branch')
2038
2039
2039 displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn)
2040 displayer = cmdutil.show_changeset(ui, repo, opts, True, matchfn)
2040 for st, ctx, fns in cmdutil.walkchangerevs(ui, repo, matchfn, opts):
2041 def prep(ctx, fns):
2041 rev = ctx.rev()
2042 rev = ctx.rev()
2042 if st == 'add':
2043 parents = [p for p in repo.changelog.parentrevs(rev)
2043 parents = [p for p in repo.changelog.parentrevs(rev)
2044 if p != nullrev]
2044 if p != nullrev]
2045 if opts.get('no_merges') and len(parents) == 2:
2045 if opts.get('no_merges') and len(parents) == 2:
2046 continue
2046 return
2047 if opts.get('only_merges') and len(parents) != 2:
2047 if opts.get('only_merges') and len(parents) != 2:
2048 continue
2048 return
2049
2050 if only_branches and ctx.branch() not in only_branches:
2049 if only_branches and ctx.branch() not in only_branches:
2051 continue
2050 return
2052
2053 if df and not df(ctx.date()[0]):
2051 if df and not df(ctx.date()[0]):
2054 continue
2052 return
2055
2053
2056 if opts.get('keyword'):
2054 if opts.get('keyword'):
2057 miss = 0
2055 miss = 0
@@ -2062,11 +2060,11 b' def log(ui, repo, *pats, **opts):'
2062 miss = 1
2060 miss = 1
2063 break
2061 break
2064 if miss:
2062 if miss:
2065 continue
2063 return
2066
2064
2067 if opts['user']:
2065 if opts['user']:
2068 if not [k for k in opts['user'] if k in ctx.user()]:
2066 if not [k for k in opts['user'] if k in ctx.user()]:
2069 continue
2067 return
2070
2068
2071 copies = []
2069 copies = []
2072 if opts.get('copies') and rev:
2070 if opts.get('copies') and rev:
@@ -2077,10 +2075,9 b' def log(ui, repo, *pats, **opts):'
2077
2075
2078 displayer.show(ctx, copies=copies)
2076 displayer.show(ctx, copies=copies)
2079
2077
2080 elif st == 'iter':
2078 for ctx in cmdutil.walkchangerevs(ui, repo, matchfn, opts, prep):
2081 if count == limit: break
2079 if count != limit:
2082
2080 if displayer.flush(ctx.rev()):
2083 if displayer.flush(rev):
2084 count += 1
2081 count += 1
2085
2082
2086 def manifest(ui, repo, node=None, rev=None):
2083 def manifest(ui, repo, node=None, rev=None):
General Comments 0
You need to be logged in to leave comments. Login now