Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 2901:9826af4841ef
Test for log --prune.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Mon, 14 Aug 2006 10:27:02 -0700 |
parents | c2932ad5476a |
children | 8b02af865990 |
comparison
equal
deleted
inserted
replaced
2900:26c37ebda1bb | 2901:9826af4841ef |
---|---|
181 matches = filter(matchfn, changefiles) | 181 matches = filter(matchfn, changefiles) |
182 if matches: | 182 if matches: |
183 fncache[rev] = matches | 183 fncache[rev] = matches |
184 wanted[rev] = 1 | 184 wanted[rev] = 1 |
185 | 185 |
186 class followfilter: | |
187 def __init__(self, onlyfirst=False): | |
188 self.startrev = -1 | |
189 self.roots = [] | |
190 self.onlyfirst = onlyfirst | |
191 | |
192 def match(self, rev): | |
193 def realparents(rev): | |
194 if self.onlyfirst: | |
195 return repo.changelog.parentrevs(rev)[0:1] | |
196 else: | |
197 return filter(lambda x: x != -1, repo.changelog.parentrevs(rev)) | |
198 | |
199 if self.startrev == -1: | |
200 self.startrev = rev | |
201 return True | |
202 | |
203 if rev > self.startrev: | |
204 # forward: all descendants | |
205 if not self.roots: | |
206 self.roots.append(self.startrev) | |
207 for parent in realparents(rev): | |
208 if parent in self.roots: | |
209 self.roots.append(rev) | |
210 return True | |
211 else: | |
212 # backwards: all parents | |
213 if not self.roots: | |
214 self.roots.extend(realparents(self.startrev)) | |
215 if rev in self.roots: | |
216 self.roots.remove(rev) | |
217 self.roots.extend(realparents(rev)) | |
218 return True | |
219 | |
220 return False | |
221 | |
222 # it might be worthwhile to do this in the iterator if the rev range | |
223 # is descending and the prune args are all within that range | |
224 for rev in opts.get('prune'): | |
225 rev = repo.changelog.rev(repo.lookup(rev)) | |
226 ff = followfilter() | |
227 stop = min(revs[0], revs[-1]) | |
228 for x in range(rev, stop-1, -1): | |
229 if ff.match(x) and wanted.has_key(x): | |
230 del wanted[x] | |
231 | |
186 def iterate(): | 232 def iterate(): |
187 class followfilter: | |
188 def __init__(self, onlyfirst=False): | |
189 self.startrev = -1 | |
190 self.roots = [] | |
191 self.onlyfirst = onlyfirst | |
192 | |
193 def match(self, rev): | |
194 def realparents(rev): | |
195 if self.onlyfirst: | |
196 return repo.changelog.parentrevs(rev)[0:1] | |
197 else: | |
198 return filter(lambda x: x != -1, repo.changelog.parentrevs(rev)) | |
199 | |
200 if self.startrev == -1: | |
201 self.startrev = rev | |
202 return True | |
203 | |
204 if rev > self.startrev: | |
205 # forward: all descendants | |
206 if not self.roots: | |
207 self.roots.append(self.startrev) | |
208 for parent in realparents(rev): | |
209 if parent in self.roots: | |
210 self.roots.append(rev) | |
211 return True | |
212 else: | |
213 # backwards: all parents | |
214 if not self.roots: | |
215 self.roots.extend(realparents(self.startrev)) | |
216 if rev in self.roots: | |
217 self.roots.remove(rev) | |
218 self.roots.extend(realparents(rev)) | |
219 return True | |
220 | |
221 return False | |
222 | |
223 if follow and not files: | 233 if follow and not files: |
224 ff = followfilter(onlyfirst=opts.get('follow_first')) | 234 ff = followfilter(onlyfirst=opts.get('follow_first')) |
225 def want(rev): | 235 def want(rev): |
226 if rev not in wanted: | 236 if ff.match(rev) and rev in wanted: |
227 return False | 237 return True |
228 return ff.match(rev) | 238 return False |
229 else: | 239 else: |
230 def want(rev): | 240 def want(rev): |
231 return rev in wanted | 241 return rev in wanted |
232 | 242 |
233 for i, window in increasing_windows(0, len(revs)): | 243 for i, window in increasing_windows(0, len(revs)): |
2964 ('r', 'rev', [], _('show the specified revision or range')), | 2974 ('r', 'rev', [], _('show the specified revision or range')), |
2965 ('M', 'no-merges', None, _('do not show merges')), | 2975 ('M', 'no-merges', None, _('do not show merges')), |
2966 ('', 'style', '', _('display using template map file')), | 2976 ('', 'style', '', _('display using template map file')), |
2967 ('m', 'only-merges', None, _('show only merges')), | 2977 ('m', 'only-merges', None, _('show only merges')), |
2968 ('p', 'patch', None, _('show patch')), | 2978 ('p', 'patch', None, _('show patch')), |
2979 ('P', 'prune', [], _('do not display revision or any of its ancestors')), | |
2969 ('', 'template', '', _('display with template')), | 2980 ('', 'template', '', _('display with template')), |
2970 ('I', 'include', [], _('include names matching the given patterns')), | 2981 ('I', 'include', [], _('include names matching the given patterns')), |
2971 ('X', 'exclude', [], _('exclude names matching the given patterns'))], | 2982 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
2972 _('hg log [OPTION]... [FILE]')), | 2983 _('hg log [OPTION]... [FILE]')), |
2973 "manifest": (manifest, [], _('hg manifest [REV]')), | 2984 "manifest": (manifest, [], _('hg manifest [REV]')), |