Show More
@@ -2189,34 +2189,42 def remove(ui, repo, *pats, **opts): | |||||
2189 | entire project history. If the files still exist in the working |
|
2189 | entire project history. If the files still exist in the working | |
2190 | directory, they will be deleted from it. If invoked with --after, |
|
2190 | directory, they will be deleted from it. If invoked with --after, | |
2191 | files that have been manually deleted are marked as removed. |
|
2191 | files that have been manually deleted are marked as removed. | |
|
2192 | ||||
|
2193 | Modified files and added files are not removed by default. To | |||
|
2194 | remove them, use the -f/--force option. | |||
2192 | """ |
|
2195 | """ | |
2193 | names = [] |
|
2196 | names = [] | |
2194 | if not opts['after'] and not pats: |
|
2197 | if not opts['after'] and not pats: | |
2195 | raise util.Abort(_('no files specified')) |
|
2198 | raise util.Abort(_('no files specified')) | |
2196 | def okaytoremove(abs, rel, exact): |
|
2199 | files, matchfn, anypats = matchpats(repo, pats, opts) | |
2197 | modified, added, removed, deleted, unknown = repo.changes(files=[abs]) |
|
2200 | exact = dict.fromkeys(files) | |
|
2201 | mardu = map(dict.fromkeys, repo.changes(files=files, match=matchfn)) | |||
|
2202 | modified, added, removed, deleted, unknown = mardu | |||
|
2203 | remove, forget = [], [] | |||
|
2204 | for src, abs, rel, exact in walk(repo, pats, opts): | |||
2198 | reason = None |
|
2205 | reason = None | |
2199 | if not deleted and opts['after']: |
|
2206 | if abs not in deleted and opts['after']: | |
2200 | reason = _('is still present') |
|
2207 | reason = _('is still present') | |
2201 | elif modified and not opts['force']: |
|
2208 | elif abs in modified and not opts['force']: | |
2202 | reason = _('is modified') |
|
2209 | reason = _('is modified (use -f to force removal)') | |
2203 | elif added: |
|
2210 | elif abs in added: | |
2204 | reason = _('has been marked for add') |
|
2211 | if opts['force']: | |
2205 | elif unknown: |
|
2212 | forget.append(abs) | |
|
2213 | continue | |||
|
2214 | reason = _('has been marked for add (use -f to force removal)') | |||
|
2215 | elif abs in unknown: | |||
2206 | reason = _('is not managed') |
|
2216 | reason = _('is not managed') | |
2207 | elif removed: |
|
2217 | elif abs in removed: | |
2208 | return False |
|
2218 | continue | |
2209 | if reason: |
|
2219 | if reason: | |
2210 | if exact: |
|
2220 | if exact: | |
2211 | ui.warn(_('not removing %s: file %s\n') % (rel, reason)) |
|
2221 | ui.warn(_('not removing %s: file %s\n') % (rel, reason)) | |
2212 | else: |
|
2222 | else: | |
2213 | return True |
|
|||
2214 | for src, abs, rel, exact in walk(repo, pats, opts): |
|
|||
2215 | if okaytoremove(abs, rel, exact): |
|
|||
2216 | if ui.verbose or not exact: |
|
2223 | if ui.verbose or not exact: | |
2217 | ui.status(_('removing %s\n') % rel) |
|
2224 | ui.status(_('removing %s\n') % rel) | |
2218 |
|
|
2225 | remove.append(abs) | |
2219 | repo.remove(names, unlink=not opts['after']) |
|
2226 | repo.forget(forget) | |
|
2227 | repo.remove(remove, unlink=not opts['after']) | |||
2220 |
|
2228 | |||
2221 | def rename(ui, repo, *pats, **opts): |
|
2229 | def rename(ui, repo, *pats, **opts): | |
2222 | """rename files; equivalent of copy + remove |
|
2230 | """rename files; equivalent of copy + remove |
@@ -3,6 +3,7 | |||||
3 | hg init a |
|
3 | hg init a | |
4 | cd a |
|
4 | cd a | |
5 | echo a > foo |
|
5 | echo a > foo | |
|
6 | hg rm foo | |||
6 | hg add foo |
|
7 | hg add foo | |
7 | hg commit -m 1 -d "1000000 0" |
|
8 | hg commit -m 1 -d "1000000 0" | |
8 | hg remove |
|
9 | hg remove | |
@@ -17,5 +18,15 hg export 1 | |||||
17 | hg log -p -r 0 |
|
18 | hg log -p -r 0 | |
18 | hg log -p -r 1 |
|
19 | hg log -p -r 1 | |
19 |
|
20 | |||
|
21 | echo a > a | |||
|
22 | hg add a | |||
|
23 | hg rm a | |||
|
24 | hg rm -f a | |||
|
25 | echo b > b | |||
|
26 | hg ci -A -m 3 -d "1000001 0" | |||
|
27 | echo c >> b | |||
|
28 | hg rm b | |||
|
29 | hg rm -f b | |||
|
30 | ||||
20 | cd .. |
|
31 | cd .. | |
21 | hg clone a b |
|
32 | hg clone a b |
@@ -1,3 +1,4 | |||||
|
1 | not removing foo: file is not managed | |||
1 | abort: no files specified |
|
2 | abort: no files specified | |
2 | undeleting foo |
|
3 | undeleting foo | |
3 | removing foo |
|
4 | removing foo | |
@@ -50,4 +51,8 diff -r 8ba83d44753d -r a1fce69c50d9 foo | |||||
50 | -a |
|
51 | -a | |
51 |
|
52 | |||
52 |
|
53 | |||
53 | 0 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
54 | not removing a: file has been marked for add (use -f to force removal) | |
|
55 | adding a | |||
|
56 | adding b | |||
|
57 | not removing b: file is modified (use -f to force removal) | |||
|
58 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
General Comments 0
You need to be logged in to leave comments.
Login now