mercurial/commands.py
changeset 2179 520dd3d28e9b
parent 2175 b2ae81a7df29
child 2181 690da72b0b16
equal deleted inserted replaced
2178:00205fe76993 2179:520dd3d28e9b
  2345     """
  2345     """
  2346     if repo.recover():
  2346     if repo.recover():
  2347         return repo.verify()
  2347         return repo.verify()
  2348     return 1
  2348     return 1
  2349 
  2349 
  2350 def remove(ui, repo, pat, *pats, **opts):
  2350 def remove(ui, repo, *pats, **opts):
  2351     """remove the specified files on the next commit
  2351     """remove the specified files on the next commit
  2352 
  2352 
  2353     Schedule the indicated files for removal from the repository.
  2353     Schedule the indicated files for removal from the repository.
  2354 
  2354 
  2355     This command schedules the files to be removed at the next commit.
  2355     This command schedules the files to be removed at the next commit.
  2356     This only removes files from the current branch, not from the
  2356     This only removes files from the current branch, not from the
  2357     entire project history.  If the files still exist in the working
  2357     entire project history.  If the files still exist in the working
  2358     directory, they will be deleted from it.
  2358     directory, they will be deleted from it.  If invoked with --after,
       
  2359     files that have been manually deleted are marked as removed.
  2359     """
  2360     """
  2360     names = []
  2361     names = []
       
  2362     if not opts['after'] and not pats:
       
  2363         raise util.Abort(_('no files specified'))
  2361     def okaytoremove(abs, rel, exact):
  2364     def okaytoremove(abs, rel, exact):
  2362         modified, added, removed, deleted, unknown = repo.changes(files=[abs])
  2365         modified, added, removed, deleted, unknown = repo.changes(files=[abs])
  2363         reason = None
  2366         reason = None
  2364         if modified and not opts['force']:
  2367         if not deleted and opts['after']:
       
  2368             reason = _('is still present')
       
  2369         elif modified and not opts['force']:
  2365             reason = _('is modified')
  2370             reason = _('is modified')
  2366         elif added:
  2371         elif added:
  2367             reason = _('has been marked for add')
  2372             reason = _('has been marked for add')
  2368         elif unknown:
  2373         elif unknown:
  2369             reason = _('is not managed')
  2374             reason = _('is not managed')
       
  2375         elif removed:
       
  2376             return False
  2370         if reason:
  2377         if reason:
  2371             if exact:
  2378             if exact:
  2372                 ui.warn(_('not removing %s: file %s\n') % (rel, reason))
  2379                 ui.warn(_('not removing %s: file %s\n') % (rel, reason))
  2373         else:
  2380         else:
  2374             return True
  2381             return True
  2375     for src, abs, rel, exact in walk(repo, (pat,) + pats, opts):
  2382     for src, abs, rel, exact in walk(repo, pats, opts):
  2376         if okaytoremove(abs, rel, exact):
  2383         if okaytoremove(abs, rel, exact):
  2377             if ui.verbose or not exact:
  2384             if ui.verbose or not exact:
  2378                 ui.status(_('removing %s\n') % rel)
  2385                 ui.status(_('removing %s\n') % rel)
  2379             names.append(abs)
  2386             names.append(abs)
  2380     repo.remove(names, unlink=True)
  2387     repo.remove(names, unlink=not opts['after'])
  2381 
  2388 
  2382 def rename(ui, repo, *pats, **opts):
  2389 def rename(ui, repo, *pats, **opts):
  2383     """rename files; equivalent of copy + remove
  2390     """rename files; equivalent of copy + remove
  2384 
  2391 
  2385     Mark dest as copies of sources; mark sources for deletion.  If
  2392     Mark dest as copies of sources; mark sources for deletion.  If
  3159           ('l', 'logfile', '', _('commit message file'))],
  3166           ('l', 'logfile', '', _('commit message file'))],
  3160          _('hg debugrawcommit [OPTION]... [FILE]...')),
  3167          _('hg debugrawcommit [OPTION]... [FILE]...')),
  3161     "recover": (recover, [], _('hg recover')),
  3168     "recover": (recover, [], _('hg recover')),
  3162     "^remove|rm":
  3169     "^remove|rm":
  3163         (remove,
  3170         (remove,
  3164          [('f', 'force', None, _('remove file even if modified')),
  3171          [('', 'after', None, _('record remove that has already occurred')),
       
  3172           ('f', 'force', None, _('remove file even if modified')),
  3165           ('I', 'include', [], _('include names matching the given patterns')),
  3173           ('I', 'include', [], _('include names matching the given patterns')),
  3166           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  3174           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  3167          _('hg remove [OPTION]... FILE...')),
  3175          _('hg remove [OPTION]... FILE...')),
  3168     "rename|mv":
  3176     "rename|mv":
  3169         (rename,
  3177         (rename,