diff mercurial/commands.py @ 15912:2bd54ffaa27e

forget: fix subrepo recursion for explicit path handling When support for handling explicit paths in subrepos was added to the forget command (95174c381525), subrepo recursion wasn't taken into account. This change fixes that by pulling the majority of the logic of commands.forget into cmdutil.forget, which can then be called from both there and subrepo.forget.
author David M. Carr <david@carrclan.us>
date Tue, 17 Jan 2012 19:10:59 -0500
parents c654eac03452
children 6c97eb445341
line wrap: on
line diff
--- a/mercurial/commands.py	Tue Jan 17 19:10:58 2012 -0500
+++ b/mercurial/commands.py	Tue Jan 17 19:10:59 2012 -0500
@@ -13,7 +13,6 @@
 import patch, help, url, encoding, templatekw, discovery
 import archival, changegroup, cmdutil, hbisect
 import sshserver, hgweb, hgweb.server, commandserver
-import match as matchmod
 import merge as mergemod
 import minirst, revset, fileset
 import dagparser, context, simplemerge
@@ -2449,46 +2448,9 @@
     if not pats:
         raise util.Abort(_('no files specified'))
 
-    wctx = repo[None]
-    m = scmutil.match(wctx, pats, opts)
-    s = repo.status(match=m, clean=True)
-    forget = sorted(s[0] + s[1] + s[3] + s[6])
-    subforget = {}
-    errs = 0
-
-    for subpath in wctx.substate:
-        sub = wctx.sub(subpath)
-        try:
-            submatch = matchmod.narrowmatcher(subpath, m)
-            for fsub in sub.walk(submatch):
-                if submatch.exact(fsub):
-                    subforget[subpath + '/' + fsub] = (fsub, sub)
-        except error.LookupError:
-            ui.status(_("skipping missing subrepository: %s\n") % subpath)
-
-    for f in m.files():
-        if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
-            if f not in subforget:
-                if os.path.exists(m.rel(f)):
-                    ui.warn(_('not removing %s: file is already untracked\n')
-                            % m.rel(f))
-                errs = 1
-
-    for f in forget:
-        if ui.verbose or not m.exact(f):
-            ui.status(_('removing %s\n') % m.rel(f))
-
-    if ui.verbose:
-        for f in sorted(subforget.keys()):
-            ui.status(_('removing %s\n') % m.rel(f))
-
-    wctx.forget(forget)
-
-    for f in sorted(subforget.keys()):
-        fsub, sub = subforget[f]
-        sub.forget([fsub])
-
-    return errs
+    m = scmutil.match(repo[None], pats, opts)
+    rejected = cmdutil.forget(ui, repo, m, prefix="", explicitonly=False)[0]
+    return rejected and 1 or 0
 
 @command(
     'graft',