Mercurial > public > mercurial-scm > hg
comparison mercurial/commands.py @ 2920:ef8ee4477019
merge with mpm.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Wed, 16 Aug 2006 10:46:24 -0700 |
parents | b70740aefa4d 3848488244fc |
children | 773c5b82d052 |
comparison
equal
deleted
inserted
replaced
2919:b70740aefa4d | 2920:ef8ee4477019 |
---|---|
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: | 186 def iterate(): |
187 def __init__(self, onlyfirst=False): | 187 class followfilter: |
188 self.startrev = -1 | 188 def __init__(self, onlyfirst=False): |
189 self.roots = [] | 189 self.startrev = -1 |
190 self.onlyfirst = onlyfirst | 190 self.roots = [] |
191 | 191 self.onlyfirst = onlyfirst |
192 def match(self, rev): | 192 |
193 def realparents(rev): | 193 def match(self, rev): |
194 if self.onlyfirst: | 194 def realparents(rev): |
195 return repo.changelog.parentrevs(rev)[0:1] | 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 | |
196 else: | 212 else: |
197 return filter(lambda x: x != -1, repo.changelog.parentrevs(rev)) | 213 # backwards: all parents |
198 | 214 if not self.roots: |
199 if self.startrev == -1: | 215 self.roots.extend(realparents(self.startrev)) |
200 self.startrev = rev | 216 if rev in self.roots: |
201 return True | 217 self.roots.remove(rev) |
202 | 218 self.roots.extend(realparents(rev)) |
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 | 219 return True |
211 else: | 220 |
212 # backwards: all parents | 221 return False |
213 if not self.roots: | 222 |
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 | |
232 def iterate(): | |
233 if follow and not files: | 223 if follow and not files: |
234 ff = followfilter(onlyfirst=opts.get('follow_first')) | 224 ff = followfilter(onlyfirst=opts.get('follow_first')) |
235 def want(rev): | 225 def want(rev): |
236 if ff.match(rev) and rev in wanted: | 226 if rev not in wanted: |
237 return True | 227 return False |
238 return False | 228 return ff.match(rev) |
239 else: | 229 else: |
240 def want(rev): | 230 def want(rev): |
241 return rev in wanted | 231 return rev in wanted |
242 | 232 |
243 for i, window in increasing_windows(0, len(revs)): | 233 for i, window in increasing_windows(0, len(revs)): |
1345 node1, node2 = revpair(ui, repo, opts['rev']) | 1335 node1, node2 = revpair(ui, repo, opts['rev']) |
1346 | 1336 |
1347 fns, matchfn, anypats = cmdutil.matchpats(repo, pats, opts) | 1337 fns, matchfn, anypats = cmdutil.matchpats(repo, pats, opts) |
1348 | 1338 |
1349 patch.diff(repo, node1, node2, fns, match=matchfn, | 1339 patch.diff(repo, node1, node2, fns, match=matchfn, |
1350 opts=ui.diffopts(opts)) | 1340 opts=patch.diffopts(ui, opts)) |
1351 | 1341 |
1352 def export(ui, repo, *changesets, **opts): | 1342 def export(ui, repo, *changesets, **opts): |
1353 """dump the header and diffs for one or more changesets | 1343 """dump the header and diffs for one or more changesets |
1354 | 1344 |
1355 Print the changeset header and diffs for one or more revisions. | 1345 Print the changeset header and diffs for one or more revisions. |
1382 if len(revs) > 1: | 1372 if len(revs) > 1: |
1383 ui.note(_('exporting patches:\n')) | 1373 ui.note(_('exporting patches:\n')) |
1384 else: | 1374 else: |
1385 ui.note(_('exporting patch:\n')) | 1375 ui.note(_('exporting patch:\n')) |
1386 patch.export(repo, map(repo.lookup, revs), template=opts['output'], | 1376 patch.export(repo, map(repo.lookup, revs), template=opts['output'], |
1387 switch_parent=opts['switch_parent'], opts=ui.diffopts(opts)) | 1377 switch_parent=opts['switch_parent'], |
1378 opts=patch.diffopts(ui, opts)) | |
1388 | 1379 |
1389 def forget(ui, repo, *pats, **opts): | 1380 def forget(ui, repo, *pats, **opts): |
1390 """don't add the specified files on the next commit (DEPRECATED) | 1381 """don't add the specified files on the next commit (DEPRECATED) |
1391 | 1382 |
1392 (DEPRECATED) | 1383 (DEPRECATED) |
1679 else: | 1670 else: |
1680 # launch the editor | 1671 # launch the editor |
1681 message = None | 1672 message = None |
1682 ui.debug(_('message:\n%s\n') % message) | 1673 ui.debug(_('message:\n%s\n') % message) |
1683 | 1674 |
1684 files, fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root) | 1675 files = patch.patch(strip, tmpname, ui, cwd=repo.root) |
1685 removes = [] | 1676 removes = [] |
1686 if len(files) > 0: | 1677 if len(files) > 0: |
1687 cfiles = files.keys() | 1678 cfiles = files.keys() |
1688 copies = [] | 1679 copies = [] |
1689 copts = {'after': False, 'force': False} | 1680 copts = {'after': False, 'force': False} |
1967 | 1958 |
1968 Merge the contents of the current working directory and the | 1959 Merge the contents of the current working directory and the |
1969 requested revision. Files that changed between either parent are | 1960 requested revision. Files that changed between either parent are |
1970 marked as changed for the next commit and a commit must be | 1961 marked as changed for the next commit and a commit must be |
1971 performed before any further updates are allowed. | 1962 performed before any further updates are allowed. |
1972 | 1963 """ |
1973 If no revision is specified, the working directory's parent is a | 1964 |
1974 head revision, and the repository contains exactly one other head, | 1965 node = _lookup(repo, node, branch) |
1975 the other head is merged with by default. Otherwise, an explicit | |
1976 revision to merge with must be provided. | |
1977 """ | |
1978 | |
1979 if node: | |
1980 node = _lookup(repo, node, branch) | |
1981 else: | |
1982 heads = repo.heads() | |
1983 if len(heads) > 2: | |
1984 raise util.Abort(_('repo has %d heads - ' | |
1985 'please merge with an explicit rev') % | |
1986 len(heads)) | |
1987 if len(heads) == 1: | |
1988 raise util.Abort(_('there is nothing to merge - ' | |
1989 'use "hg update" instead')) | |
1990 parent = repo.dirstate.parents()[0] | |
1991 if parent not in heads: | |
1992 raise util.Abort(_('working dir not at a head rev - ' | |
1993 'use "hg update" or merge with an explicit rev')) | |
1994 node = parent == heads[0] and heads[-1] or heads[0] | |
1995 return hg.merge(repo, node, force=force) | 1966 return hg.merge(repo, node, force=force) |
1996 | 1967 |
1997 def outgoing(ui, repo, dest=None, **opts): | 1968 def outgoing(ui, repo, dest=None, **opts): |
1998 """show changesets not found in destination | 1969 """show changesets not found in destination |
1999 | 1970 |
2895 (diff, | 2866 (diff, |
2896 [('r', 'rev', [], _('revision')), | 2867 [('r', 'rev', [], _('revision')), |
2897 ('a', 'text', None, _('treat all files as text')), | 2868 ('a', 'text', None, _('treat all files as text')), |
2898 ('p', 'show-function', None, | 2869 ('p', 'show-function', None, |
2899 _('show which function each change is in')), | 2870 _('show which function each change is in')), |
2900 ('g', 'git', None, _('use git extended diff format')), | |
2901 ('w', 'ignore-all-space', None, | 2871 ('w', 'ignore-all-space', None, |
2902 _('ignore white space when comparing lines')), | 2872 _('ignore white space when comparing lines')), |
2903 ('b', 'ignore-space-change', None, | 2873 ('b', 'ignore-space-change', None, |
2904 _('ignore changes in the amount of white space')), | 2874 _('ignore changes in the amount of white space')), |
2905 ('B', 'ignore-blank-lines', None, | 2875 ('B', 'ignore-blank-lines', None, |
2995 ('r', 'rev', [], _('show the specified revision or range')), | 2965 ('r', 'rev', [], _('show the specified revision or range')), |
2996 ('M', 'no-merges', None, _('do not show merges')), | 2966 ('M', 'no-merges', None, _('do not show merges')), |
2997 ('', 'style', '', _('display using template map file')), | 2967 ('', 'style', '', _('display using template map file')), |
2998 ('m', 'only-merges', None, _('show only merges')), | 2968 ('m', 'only-merges', None, _('show only merges')), |
2999 ('p', 'patch', None, _('show patch')), | 2969 ('p', 'patch', None, _('show patch')), |
3000 ('P', 'prune', [], _('do not display revision or any of its ancestors')), | |
3001 ('', 'template', '', _('display with template')), | 2970 ('', 'template', '', _('display with template')), |
3002 ('I', 'include', [], _('include names matching the given patterns')), | 2971 ('I', 'include', [], _('include names matching the given patterns')), |
3003 ('X', 'exclude', [], _('exclude names matching the given patterns'))], | 2972 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
3004 _('hg log [OPTION]... [FILE]')), | 2973 _('hg log [OPTION]... [FILE]')), |
3005 "manifest": (manifest, [], _('hg manifest [REV]')), | 2974 "manifest": (manifest, [], _('hg manifest [REV]')), |