From: Junio C Hamano Date: Sun, 1 May 2005 16:33:12 +0000 (-0700) Subject: [PATCH] Allow removing files in a subdirectory. X-Git-Tag: v0.99~674 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=e2a669bb2e667d2cde998bdbbefe51dd04e2bff1;p=git.git [PATCH] Allow removing files in a subdirectory. I found this during a conflict merge testing. The original did not have either DF (a file) or DF/DF (a file DF/DF under a directory DF). One side created DF, the other created DF/DF. I first resolved DF as a new file by taking what the first side did. After that, the entry DF/DF cannot be resolved by running git-update-cache --remove although it does not exist on the filesystem. $ /bin/ls -F AN DF MN NM NN SS Z/ $ git-ls-files --stage | grep DF 100644 71420ab81e254145d26d6fc0cddee64c1acd4787 0 DF 100644 68a6d8b91da11045cf4aa3a5ab9f2a781c701249 2 DF/DF $ git-update-cache --remove DF/DF fatal: Unable to add DF/DF to database It turns out that the errno from open() in this case was not ENOENT but ENOTDIR, which the code did not check. Here is a fix. Signed-off-by: Junio C Hamano Signed-off-by: Linus Torvalds --- diff --git a/update-cache.c b/update-cache.c index 16e1bb9ae..5dda89a93 100644 --- a/update-cache.c +++ b/update-cache.c @@ -111,7 +111,7 @@ static int add_file_to_cache(char *path) fd = open(path, O_RDONLY); if (fd < 0) { - if (errno == ENOENT) { + if (errno == ENOENT || errno == ENOTDIR) { if (allow_remove) return remove_file_from_cache(path); }