11 import os, re, difflib, time, tempfile, errno |
11 import os, re, difflib, time, tempfile, errno |
12 import hg, scmutil, util, revlog, extensions, copies, error, bookmarks |
12 import hg, scmutil, util, revlog, extensions, copies, error, bookmarks |
13 import patch, help, url, encoding, templatekw, discovery |
13 import patch, help, url, encoding, templatekw, discovery |
14 import archival, changegroup, cmdutil, hbisect |
14 import archival, changegroup, cmdutil, hbisect |
15 import sshserver, hgweb, hgweb.server, commandserver |
15 import sshserver, hgweb, hgweb.server, commandserver |
16 import match as matchmod |
|
17 import merge as mergemod |
16 import merge as mergemod |
18 import minirst, revset, fileset |
17 import minirst, revset, fileset |
19 import dagparser, context, simplemerge |
18 import dagparser, context, simplemerge |
20 import random, setdiscovery, treediscovery, dagutil |
19 import random, setdiscovery, treediscovery, dagutil |
21 import phases |
20 import phases |
2447 """ |
2446 """ |
2448 |
2447 |
2449 if not pats: |
2448 if not pats: |
2450 raise util.Abort(_('no files specified')) |
2449 raise util.Abort(_('no files specified')) |
2451 |
2450 |
2452 wctx = repo[None] |
2451 m = scmutil.match(repo[None], pats, opts) |
2453 m = scmutil.match(wctx, pats, opts) |
2452 rejected = cmdutil.forget(ui, repo, m, prefix="", explicitonly=False)[0] |
2454 s = repo.status(match=m, clean=True) |
2453 return rejected and 1 or 0 |
2455 forget = sorted(s[0] + s[1] + s[3] + s[6]) |
|
2456 subforget = {} |
|
2457 errs = 0 |
|
2458 |
|
2459 for subpath in wctx.substate: |
|
2460 sub = wctx.sub(subpath) |
|
2461 try: |
|
2462 submatch = matchmod.narrowmatcher(subpath, m) |
|
2463 for fsub in sub.walk(submatch): |
|
2464 if submatch.exact(fsub): |
|
2465 subforget[subpath + '/' + fsub] = (fsub, sub) |
|
2466 except error.LookupError: |
|
2467 ui.status(_("skipping missing subrepository: %s\n") % subpath) |
|
2468 |
|
2469 for f in m.files(): |
|
2470 if f not in repo.dirstate and not os.path.isdir(m.rel(f)): |
|
2471 if f not in subforget: |
|
2472 if os.path.exists(m.rel(f)): |
|
2473 ui.warn(_('not removing %s: file is already untracked\n') |
|
2474 % m.rel(f)) |
|
2475 errs = 1 |
|
2476 |
|
2477 for f in forget: |
|
2478 if ui.verbose or not m.exact(f): |
|
2479 ui.status(_('removing %s\n') % m.rel(f)) |
|
2480 |
|
2481 if ui.verbose: |
|
2482 for f in sorted(subforget.keys()): |
|
2483 ui.status(_('removing %s\n') % m.rel(f)) |
|
2484 |
|
2485 wctx.forget(forget) |
|
2486 |
|
2487 for f in sorted(subforget.keys()): |
|
2488 fsub, sub = subforget[f] |
|
2489 sub.forget([fsub]) |
|
2490 |
|
2491 return errs |
|
2492 |
2454 |
2493 @command( |
2455 @command( |
2494 'graft', |
2456 'graft', |
2495 [('c', 'continue', False, _('resume interrupted graft')), |
2457 [('c', 'continue', False, _('resume interrupted graft')), |
2496 ('e', 'edit', False, _('invoke editor on commit messages')), |
2458 ('e', 'edit', False, _('invoke editor on commit messages')), |