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, |