Mercurial > public > mercurial-scm > hg
comparison mercurial/cmdutil.py @ 6580:da2a20d2ba3d
walkchangerev: use new match objects
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 12 May 2008 11:37:07 -0500 |
parents | 0159b7a36184 |
children | 1ae7cb678d24 |
comparison
equal
deleted
inserted
replaced
6579:0159b7a36184 | 6580:da2a20d2ba3d |
---|---|
975 yield start, min(windowsize, start-end-1) | 975 yield start, min(windowsize, start-end-1) |
976 start -= windowsize | 976 start -= windowsize |
977 if windowsize < sizelimit: | 977 if windowsize < sizelimit: |
978 windowsize *= 2 | 978 windowsize *= 2 |
979 | 979 |
980 files, matchfn, anypats = matchpats(repo, pats, opts) | 980 m = match(repo, pats, opts) |
981 follow = opts.get('follow') or opts.get('follow_first') | 981 follow = opts.get('follow') or opts.get('follow_first') |
982 | 982 |
983 if repo.changelog.count() == 0: | 983 if repo.changelog.count() == 0: |
984 return [], matchfn | 984 return [], m |
985 | 985 |
986 if follow: | 986 if follow: |
987 defrange = '%s:0' % repo.changectx().rev() | 987 defrange = '%s:0' % repo.changectx().rev() |
988 else: | 988 else: |
989 defrange = '-1:0' | 989 defrange = '-1:0' |
990 revs = revrange(repo, opts['rev'] or [defrange]) | 990 revs = revrange(repo, opts['rev'] or [defrange]) |
991 wanted = {} | 991 wanted = {} |
992 slowpath = anypats or opts.get('removed') | 992 slowpath = m.anypats() or opts.get('removed') |
993 fncache = {} | 993 fncache = {} |
994 | 994 |
995 if not slowpath and not files: | 995 if not slowpath and not m.files(): |
996 # No files, no patterns. Display all revs. | 996 # No files, no patterns. Display all revs. |
997 wanted = dict.fromkeys(revs) | 997 wanted = dict.fromkeys(revs) |
998 copies = [] | 998 copies = [] |
999 if not slowpath: | 999 if not slowpath: |
1000 # Only files, no patterns. Check the history of each file. | 1000 # Only files, no patterns. Check the history of each file. |
1015 # only yield rev for which we have the changelog, it can | 1015 # only yield rev for which we have the changelog, it can |
1016 # happen while doing "hg log" during a pull or commit | 1016 # happen while doing "hg log" during a pull or commit |
1017 if rev[0] < cl_count: | 1017 if rev[0] < cl_count: |
1018 yield rev | 1018 yield rev |
1019 def iterfiles(): | 1019 def iterfiles(): |
1020 for filename in files: | 1020 for filename in m.files(): |
1021 yield filename, None | 1021 yield filename, None |
1022 for filename_node in copies: | 1022 for filename_node in copies: |
1023 yield filename_node | 1023 yield filename_node |
1024 minrev, maxrev = min(revs), max(revs) | 1024 minrev, maxrev = min(revs), max(revs) |
1025 for file_, node in iterfiles(): | 1025 for file_, node in iterfiles(): |
1054 nullrev): | 1054 nullrev): |
1055 for j in xrange(i - window, i + 1): | 1055 for j in xrange(i - window, i + 1): |
1056 yield j, change(j)[3] | 1056 yield j, change(j)[3] |
1057 | 1057 |
1058 for rev, changefiles in changerevgen(): | 1058 for rev, changefiles in changerevgen(): |
1059 matches = filter(matchfn, changefiles) | 1059 matches = filter(m, changefiles) |
1060 if matches: | 1060 if matches: |
1061 fncache[rev] = matches | 1061 fncache[rev] = matches |
1062 wanted[rev] = 1 | 1062 wanted[rev] = 1 |
1063 | 1063 |
1064 class followfilter: | 1064 class followfilter: |
1107 for x in xrange(rev, stop-1, -1): | 1107 for x in xrange(rev, stop-1, -1): |
1108 if ff.match(x) and x in wanted: | 1108 if ff.match(x) and x in wanted: |
1109 del wanted[x] | 1109 del wanted[x] |
1110 | 1110 |
1111 def iterate(): | 1111 def iterate(): |
1112 if follow and not files: | 1112 if follow and not m.files(): |
1113 ff = followfilter(onlyfirst=opts.get('follow_first')) | 1113 ff = followfilter(onlyfirst=opts.get('follow_first')) |
1114 def want(rev): | 1114 def want(rev): |
1115 if ff.match(rev) and rev in wanted: | 1115 if ff.match(rev) and rev in wanted: |
1116 return True | 1116 return True |
1117 return False | 1117 return False |
1127 for rev in srevs: | 1127 for rev in srevs: |
1128 fns = fncache.get(rev) | 1128 fns = fncache.get(rev) |
1129 if not fns: | 1129 if not fns: |
1130 def fns_generator(): | 1130 def fns_generator(): |
1131 for f in change(rev)[3]: | 1131 for f in change(rev)[3]: |
1132 if matchfn(f): | 1132 if m(f): |
1133 yield f | 1133 yield f |
1134 fns = fns_generator() | 1134 fns = fns_generator() |
1135 yield 'add', rev, fns | 1135 yield 'add', rev, fns |
1136 for rev in nrevs: | 1136 for rev in nrevs: |
1137 yield 'iter', rev, None | 1137 yield 'iter', rev, None |
1138 return iterate(), matchfn | 1138 return iterate(), m |
1139 | 1139 |
1140 def commit(ui, repo, commitfunc, pats, opts): | 1140 def commit(ui, repo, commitfunc, pats, opts): |
1141 '''commit the specified files or all outstanding changes''' | 1141 '''commit the specified files or all outstanding changes''' |
1142 date = opts.get('date') | 1142 date = opts.get('date') |
1143 if date: | 1143 if date: |