diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -2240,6 +2240,12 @@ def forget(ui, repo, match, prefix, expl if f not in repo.dirstate and not repo.wvfs.isdir(f): if f not in forgot: if repo.wvfs.exists(f): + # Don't complain if the exact case match wasn't given. + # But don't do this until after checking 'forgot', so + # that subrepo files aren't normalized, and this op is + # purely from data cached by the status walk above. + if repo.dirstate.normalize(f) in repo.dirstate: + continue ui.warn(_('not removing %s: ' 'file is already untracked\n') % match.rel(f)) diff --git a/tests/test-add.t b/tests/test-add.t --- a/tests/test-add.t +++ b/tests/test-add.t @@ -179,6 +179,9 @@ Test that adding a directory doesn't req $ hg add -v capsdir1/capsdir adding CapsDir1/CapsDir/AbC.txt (glob) adding CapsDir1/CapsDir/SubDir/Def.txt (glob) + + $ hg forget capsdir1/capsdir/abc.txt + removing CapsDir1/CapsDir/AbC.txt (glob) #endif $ cd ..