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 |
|
|
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 |
|
|
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 |
|
|
1030 | d = ctx.date() | |
1032 |
|
|
1031 | if df(d[0]): | |
1033 |
|
|
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 |
|
|
1036 | if rev in results: | |
1036 |
|
|
1037 | ui.status(_("Found revision %s from %s\n") % | |
1037 |
|
|
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 |
|
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 |
|
|
1223 | prepare(ctx, fns) | |
1229 | for rev in nrevs: |
|
1224 | for rev in nrevs: | |
1230 |
yield |
|
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 |
|
|
1307 | rev = ctx.rev() | |
1308 |
|
|
1308 | pctx = ctx.parents()[0] | |
1309 |
|
|
1309 | parent = pctx.rev() | |
@@ -1337,7 +1337,8 b' def grep(ui, repo, pattern, *pats, **opt' | |||||
1337 |
|
|
1337 | grepbody(pfn, parent, flog.read(fnode)) | |
1338 |
|
|
1338 | except error.LookupError: | |
1339 |
|
|
1339 | pass | |
1340 | elif st == 'iter': |
|
1340 | ||
|
1341 | for ctx in cmdutil.walkchangerevs(ui, repo, matchfn, opts, prep): | |||
1341 |
|
|
1342 | rev = ctx.rev() | |
1342 |
|
|
1343 | parent = ctx.parents()[0].rev() | |
1343 |
|
|
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 |
|
|
2043 | parents = [p for p in repo.changelog.parentrevs(rev) | |
2044 |
|
|
2044 | if p != nullrev] | |
2045 |
|
|
2045 | if opts.get('no_merges') and len(parents) == 2: | |
2046 |
|
|
2046 | return | |
2047 |
|
|
2047 | if opts.get('only_merges') and len(parents) != 2: | |
2048 |
|
|
2048 | return | |
2049 |
|
||||
2050 |
|
|
2049 | if only_branches and ctx.branch() not in only_branches: | |
2051 |
|
|
2050 | return | |
2052 |
|
||||
2053 |
|
|
2051 | if df and not df(ctx.date()[0]): | |
2054 |
|
|
2052 | return | |
2055 |
|
2053 | |||
2056 |
|
|
2054 | if opts.get('keyword'): | |
2057 |
|
|
2055 | miss = 0 | |
@@ -2062,11 +2060,11 b' def log(ui, repo, *pats, **opts):' | |||||
2062 |
|
|
2060 | miss = 1 | |
2063 |
|
|
2061 | break | |
2064 |
|
|
2062 | if miss: | |
2065 |
|
|
2063 | return | |
2066 |
|
2064 | |||
2067 |
|
|
2065 | if opts['user']: | |
2068 |
|
|
2066 | if not [k for k in opts['user'] if k in ctx.user()]: | |
2069 |
|
|
2067 | return | |
2070 |
|
2068 | |||
2071 |
|
|
2069 | copies = [] | |
2072 |
|
|
2070 | if opts.get('copies') and rev: | |
@@ -2077,10 +2075,9 b' def log(ui, repo, *pats, **opts):' | |||||
2077 |
|
2075 | |||
2078 |
|
|
2076 | displayer.show(ctx, copies=copies) | |
2079 |
|
2077 | |||
2080 | elif st == 'iter': |
|
2078 | for ctx in cmdutil.walkchangerevs(ui, repo, matchfn, opts, prep): | |
2081 |
|
|
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