2050 rejected = wctx.forget(forget, prefix) |
2050 rejected = wctx.forget(forget, prefix) |
2051 bad.extend(f for f in rejected if f in match.files()) |
2051 bad.extend(f for f in rejected if f in match.files()) |
2052 forgot.extend(forget) |
2052 forgot.extend(forget) |
2053 return bad, forgot |
2053 return bad, forgot |
2054 |
2054 |
|
2055 def remove(ui, repo, m, after, force): |
|
2056 ret = 0 |
|
2057 s = repo.status(match=m, clean=True) |
|
2058 modified, added, deleted, clean = s[0], s[1], s[3], s[6] |
|
2059 |
|
2060 # warn about failure to delete explicit files/dirs |
|
2061 wctx = repo[None] |
|
2062 for f in m.files(): |
|
2063 if f in repo.dirstate or f in wctx.dirs(): |
|
2064 continue |
|
2065 if os.path.exists(m.rel(f)): |
|
2066 if os.path.isdir(m.rel(f)): |
|
2067 ui.warn(_('not removing %s: no tracked files\n') % m.rel(f)) |
|
2068 else: |
|
2069 ui.warn(_('not removing %s: file is untracked\n') % m.rel(f)) |
|
2070 # missing files will generate a warning elsewhere |
|
2071 ret = 1 |
|
2072 |
|
2073 if force: |
|
2074 list = modified + deleted + clean + added |
|
2075 elif after: |
|
2076 list = deleted |
|
2077 for f in modified + added + clean: |
|
2078 ui.warn(_('not removing %s: file still exists\n') % m.rel(f)) |
|
2079 ret = 1 |
|
2080 else: |
|
2081 list = deleted + clean |
|
2082 for f in modified: |
|
2083 ui.warn(_('not removing %s: file is modified (use -f' |
|
2084 ' to force removal)\n') % m.rel(f)) |
|
2085 ret = 1 |
|
2086 for f in added: |
|
2087 ui.warn(_('not removing %s: file has been marked for add' |
|
2088 ' (use forget to undo)\n') % m.rel(f)) |
|
2089 ret = 1 |
|
2090 |
|
2091 for f in sorted(list): |
|
2092 if ui.verbose or not m.exact(f): |
|
2093 ui.status(_('removing %s\n') % m.rel(f)) |
|
2094 |
|
2095 wlock = repo.wlock() |
|
2096 try: |
|
2097 if not after: |
|
2098 for f in list: |
|
2099 if f in added: |
|
2100 continue # we never unlink added files on remove |
|
2101 util.unlinkpath(repo.wjoin(f), ignoremissing=True) |
|
2102 repo[None].forget(list) |
|
2103 finally: |
|
2104 wlock.release() |
|
2105 |
|
2106 return ret |
|
2107 |
2055 def cat(ui, repo, ctx, matcher, prefix, **opts): |
2108 def cat(ui, repo, ctx, matcher, prefix, **opts): |
2056 err = 1 |
2109 err = 1 |
2057 |
2110 |
2058 def write(path): |
2111 def write(path): |
2059 fp = makefileobj(repo, opts.get('output'), ctx.node(), |
2112 fp = makefileobj(repo, opts.get('output'), ctx.node(), |