Skip to content

Commit

Permalink
[PATCH] Allow removing files in a subdirectory.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano authored and Linus Torvalds committed May 1, 2005
1 parent 21a08dc commit e2a669b
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion update-cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit e2a669b

Please sign in to comment.