From e2a669bb2e667d2cde998bdbbefe51dd04e2bff1 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 1 May 2005 09:33:12 -0700 Subject: [PATCH] [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 --- update-cache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/update-cache.c b/update-cache.c index 16e1bb9aea..5dda89a93e 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); }