mercurial/cmdutil.py
changeset 23289 ae5d0a22ee7e
parent 23258 10697f29af2b
child 23325 4165cfd67519
equal deleted inserted replaced
23288:2b9bc7963504 23289:ae5d0a22ee7e
  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(),