summaryrefslogtreecommitdiff
path: root/update-cache.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-05-01 16:33:12 (GMT)
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-01 16:33:12 (GMT)
commite2a669bb2e667d2cde998bdbbefe51dd04e2bff1 (patch)
tree6f0f1d99169f9d90aa44e47d1bcff7b1dd4d8ea0 /update-cache.c
parent21a08dcbe70a79206b76c89fb95e26d3a7fdf1f4 (diff)
downloadgit-e2a669bb2e667d2cde998bdbbefe51dd04e2bff1.zip
git-e2a669bb2e667d2cde998bdbbefe51dd04e2bff1.tar.gz
git-e2a669bb2e667d2cde998bdbbefe51dd04e2bff1.tar.bz2
[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 <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'update-cache.c')
-rw-r--r--update-cache.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/update-cache.c b/update-cache.c
index 16e1bb9..5dda89a 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);
}