[PATCH] Improve git-update-index error reporting
This makes git-update-index error reporting much less confusing. The user will know what went wrong with better precision, and will be given a hopefully less confusing advice. Signed-off-by: Petr Baudis <pasky@suse.cz> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
37539fbda5
commit
34143b2639
@ -50,11 +50,20 @@ static int add_file_to_cache(char *path)
|
|||||||
* case just fine without --force-remove.
|
* case just fine without --force-remove.
|
||||||
*/
|
*/
|
||||||
if (status == 0 || (errno == ENOENT || errno == ENOTDIR)) {
|
if (status == 0 || (errno == ENOENT || errno == ENOTDIR)) {
|
||||||
if (allow_remove)
|
if (allow_remove) {
|
||||||
return remove_file_from_cache(path);
|
if (remove_file_from_cache(path))
|
||||||
|
return error("%s: cannot remove from the index",
|
||||||
|
path);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
} else if (status < 0) {
|
||||||
|
return error("%s: does not exist and --remove not passed",
|
||||||
|
path);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (0 == status)
|
if (0 == status)
|
||||||
return error("%s: is a directory", path);
|
return error("%s: is a directory - add files inside instead",
|
||||||
|
path);
|
||||||
else
|
else
|
||||||
return error("lstat(\"%s\"): %s", path,
|
return error("lstat(\"%s\"): %s", path,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
@ -71,15 +80,17 @@ static int add_file_to_cache(char *path)
|
|||||||
case S_IFREG:
|
case S_IFREG:
|
||||||
fd = open(path, O_RDONLY);
|
fd = open(path, O_RDONLY);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return -1;
|
return error("open(\"%s\"): %s", path, strerror(errno));
|
||||||
if (index_fd(ce->sha1, fd, &st, !info_only, NULL) < 0)
|
if (index_fd(ce->sha1, fd, &st, !info_only, NULL) < 0)
|
||||||
return -1;
|
return error("%s: failed to insert into database", path);
|
||||||
break;
|
break;
|
||||||
case S_IFLNK:
|
case S_IFLNK:
|
||||||
target = xmalloc(st.st_size+1);
|
target = xmalloc(st.st_size+1);
|
||||||
if (readlink(path, target, st.st_size+1) != st.st_size) {
|
if (readlink(path, target, st.st_size+1) != st.st_size) {
|
||||||
|
char *errstr = strerror(errno);
|
||||||
free(target);
|
free(target);
|
||||||
return -1;
|
return error("readlink(\"%s\"): %s", path,
|
||||||
|
errstr);
|
||||||
}
|
}
|
||||||
if (info_only) {
|
if (info_only) {
|
||||||
unsigned char hdr[50];
|
unsigned char hdr[50];
|
||||||
@ -87,15 +98,18 @@ static int add_file_to_cache(char *path)
|
|||||||
write_sha1_file_prepare(target, st.st_size, "blob",
|
write_sha1_file_prepare(target, st.st_size, "blob",
|
||||||
ce->sha1, hdr, &hdrlen);
|
ce->sha1, hdr, &hdrlen);
|
||||||
} else if (write_sha1_file(target, st.st_size, "blob", ce->sha1))
|
} else if (write_sha1_file(target, st.st_size, "blob", ce->sha1))
|
||||||
return -1;
|
return error("%s: failed to insert into database", path);
|
||||||
free(target);
|
free(target);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return error("%s: unsupported file type", path);
|
||||||
}
|
}
|
||||||
option = allow_add ? ADD_CACHE_OK_TO_ADD : 0;
|
option = allow_add ? ADD_CACHE_OK_TO_ADD : 0;
|
||||||
option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0;
|
option |= allow_replace ? ADD_CACHE_OK_TO_REPLACE : 0;
|
||||||
return add_cache_entry(ce, option);
|
if (add_cache_entry(ce, option))
|
||||||
|
return error("%s: cannot add to the index - missing --add option?",
|
||||||
|
path);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int compare_data(struct cache_entry *ce, struct stat *st)
|
static int compare_data(struct cache_entry *ce, struct stat *st)
|
||||||
@ -393,11 +407,11 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
if (force_remove) {
|
if (force_remove) {
|
||||||
if (remove_file_from_cache(path))
|
if (remove_file_from_cache(path))
|
||||||
die("git-update-index: --force-remove cannot remove %s", path);
|
die("git-update-index: unable to remove %s", path);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (add_file_to_cache(path))
|
if (add_file_to_cache(path))
|
||||||
die("Unable to add %s to database; maybe you want to use --add option?", path);
|
die("Unable to process file %s", path);
|
||||||
}
|
}
|
||||||
if (write_cache(newfd, active_cache, active_nr) ||
|
if (write_cache(newfd, active_cache, active_nr) ||
|
||||||
commit_index_file(&cache_file))
|
commit_index_file(&cache_file))
|
||||||
|
Reference in New Issue
Block a user