When "path" exists as a file or a symlink in the index, an
attempt to add "path/file" is refused because it results in file
vs directory conflict. Similarly when "path/file1",
"path/file2", etc. exist, an attempt to add "path" as a file or
a symlink is refused. With git-update-cache --replace, these
existing entries that conflict with the entry being added are
automatically removed from the cache, with warning messages.
Signed-off-by: Junio C Hamano <junkio@cox.net>
@ -1098,7 +1098,7 @@ returns the name of the temporary file in the following format:
@@ -1098,7 +1098,7 @@ returns the name of the temporary file in the following format:
@ -234,8 +254,12 @@ int add_cache_entry(struct cache_entry *ce, int ok_to_add)
@@ -234,8 +254,12 @@ int add_cache_entry(struct cache_entry *ce, int ok_to_add)
if (!ok_to_add)
return -1;
if (check_file_directory_conflict(ce))
return -1;
if (check_file_directory_conflict(ce, ok_to_replace)) {
@ -18,7 +18,7 @@ static int read_one_entry(unsigned char *sha1, const char *base, int baselen, co
@@ -18,7 +18,7 @@ static int read_one_entry(unsigned char *sha1, const char *base, int baselen, co
memcpy(ce->name, base, baselen);
memcpy(ce->name + baselen, pathname, len+1);
memcpy(ce->sha1, sha1, 20);
return add_cache_entry(ce, 1);
return add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
}
static int read_tree_recursive(void *buffer, unsigned long size,