forget: show warning messages for forgetting in subrepo correctly stable
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Mon, 06 Feb 2012 14:37:49 +0900
branchstable
changeset 16070 f11eee00c652
parent 16069 f680ed10e2c4
child 16071 8134ec8627e7
forget: show warning messages for forgetting in subrepo correctly in 'cmdutil.forget()': for f in match.files(): if match.exact(f) or not explicitonly: .... is equal to: for f in match.files(): if True: .... because 'f' from 'match.files()' should 'match.exact(f)': - 'match.files()' returns 'self._files' - 'match.exact(f)' examines 'f in self._fmap', - 'self._fmap' of match is 'set(self._files)' then, 'explicitonly' wants to suppress warning messges, if it is true (= 'cmdutil.forget()' is invoked from 'subrepo.forget()'). so, current code should be fixed as: if not explicitonly: for f in match.files(): ....
mercurial/cmdutil.py
tests/test-subrepo-recursion.t
--- a/mercurial/cmdutil.py	Sat Feb 04 00:02:05 2012 +0000
+++ b/mercurial/cmdutil.py	Mon Feb 06 14:37:49 2012 +0900
@@ -1224,8 +1224,8 @@
             ui.status(_("skipping missing subrepository: %s\n")
                            % join(subpath))
 
-    for f in match.files():
-        if match.exact(f) or not explicitonly:
+    if not explicitonly:
+        for f in match.files():
             if f not in repo.dirstate and not os.path.isdir(match.rel(join(f))):
                 if f not in forgot:
                     if os.path.exists(match.rel(join(f))):
--- a/tests/test-subrepo-recursion.t	Sat Feb 04 00:02:05 2012 +0000
+++ b/tests/test-subrepo-recursion.t	Mon Feb 06 14:37:49 2012 +0900
@@ -195,10 +195,14 @@
   $ hg add foo/bar/z2.txt
   $ hg status -S
   A foo/bar/z2.txt
-This is expected to forget the file, but is currently broken
   $ hg forget foo/bar/z2.txt
   $ hg status -S
   ? foo/bar/z2.txt
+  $ hg forget foo/bar/z2.txt
+  not removing foo/bar/z2.txt: file is already untracked
+  [1]
+  $ hg status -S
+  ? foo/bar/z2.txt
   $ rm foo/bar/z2.txt
 
 Log with the relationships between repo and its subrepo: