diff options
author | Junio C Hamano <junkio@cox.net> | 2005-05-01 09:33:12 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 09:33:12 -0700 |
commit | e2a669bb2e667d2cde998bdbbefe51dd04e2bff1 (patch) | |
tree | 6f0f1d99169f9d90aa44e47d1bcff7b1dd4d8ea0 /update-cache.c | |
parent | 21a08dcbe70a79206b76c89fb95e26d3a7fdf1f4 (diff) | |
download | git-e2a669bb2e667d2cde998bdbbefe51dd04e2bff1.tar.gz |
[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.c | 2 |
1 files changed, 1 insertions, 1 deletions
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); } |