rm: do not complain about d/f conflicts during deletion
commit9a6728d4d14a08791861a63b7567ee0b50e59f70
authorJeff King <peff@peff.net>
Thu, 4 Apr 2013 19:03:35 +0000 (4 15:03 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 4 Apr 2013 19:28:47 +0000 (4 12:28 -0700)
tree246e029fbdefd279e1b763c9e22360a54a07ee04
parent9b924eee98332225f63c36c5d9673c47e0a8b769
rm: do not complain about d/f conflicts during deletion

If we used to have an index entry "d/f", but "d" has been
replaced by a non-directory entry, the user may still want
to run "git rm" to delete the stale index entry. They could
use "git rm --cached" to just touch the index, but "git rm"
should also work: we explicitly try to handle the case that
the file has already been removed from the working tree.

However, because unlinking "d/f" in this case will not yield
ENOENT, but rather ENOTDIR, we do not notice that the file
is already gone. Instead, we report it as an error.

The simple solution is to treat ENOTDIR in this case exactly
like ENOENT; all we want to know is whether the file is
already gone, and if a leading path is no longer a
directory, then by definition the sub-path is gone.

Reported-by: jpinheiro <7jpinheiro@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rm.c
dir.c
t/t3600-rm.sh