[PATCH] git-local-fetch: Avoid confusing error messages on packed repositories

If the source repository was packed, and git-local-fetch needed to
fetch a pack file, it spewed a misleading error message about not
being able to find the unpacked object.  Fixed by adding the
warn_if_not_exists argument to copy_file(), which controls printing
of error messages in case the source file does not exist.

Signed-off-by: Sergey Vlasov <vsu@altlinux.ru>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Sergey Vlasov 2005-09-23 16:28:38 +04:00 committed by Junio C Hamano
parent e2b77f026a
commit 628cd5430f

View File

@ -52,7 +52,8 @@ static int setup_indices(void)
return 0; return 0;
} }
static int copy_file(const char *source, const char *dest, const char *hex) static int copy_file(const char *source, const char *dest, const char *hex,
int warn_if_not_exists)
{ {
if (use_link) { if (use_link) {
if (!link(source, dest)) { if (!link(source, dest)) {
@ -61,6 +62,7 @@ static int copy_file(const char *source, const char *dest, const char *hex)
} }
/* If we got ENOENT there is no point continuing. */ /* If we got ENOENT there is no point continuing. */
if (errno == ENOENT) { if (errno == ENOENT) {
if (warn_if_not_exists)
fprintf(stderr, "does not exist %s\n", source); fprintf(stderr, "does not exist %s\n", source);
return -1; return -1;
} }
@ -68,6 +70,8 @@ static int copy_file(const char *source, const char *dest, const char *hex)
if (use_symlink) { if (use_symlink) {
struct stat st; struct stat st;
if (stat(source, &st)) { if (stat(source, &st)) {
if (!warn_if_not_exists && errno == ENOENT)
return -1;
fprintf(stderr, "cannot stat %s: %s\n", source, fprintf(stderr, "cannot stat %s: %s\n", source,
strerror(errno)); strerror(errno));
return -1; return -1;
@ -83,8 +87,11 @@ static int copy_file(const char *source, const char *dest, const char *hex)
void *map; void *map;
ifd = open(source, O_RDONLY); ifd = open(source, O_RDONLY);
if (ifd < 0 || fstat(ifd, &st) < 0) { if (ifd < 0 || fstat(ifd, &st) < 0) {
int err = errno;
if (ifd >= 0) if (ifd >= 0)
close(ifd); close(ifd);
if (!warn_if_not_exists && err == ENOENT)
return -1;
fprintf(stderr, "cannot open %s\n", source); fprintf(stderr, "cannot open %s\n", source);
return -1; return -1;
} }
@ -129,11 +136,11 @@ static int fetch_pack(const unsigned char *sha1)
sprintf(filename, "%s/objects/pack/pack-%s.pack", sprintf(filename, "%s/objects/pack/pack-%s.pack",
path, sha1_to_hex(target->sha1)); path, sha1_to_hex(target->sha1));
copy_file(filename, sha1_pack_name(target->sha1), copy_file(filename, sha1_pack_name(target->sha1),
sha1_to_hex(target->sha1)); sha1_to_hex(target->sha1), 1);
sprintf(filename, "%s/objects/pack/pack-%s.idx", sprintf(filename, "%s/objects/pack/pack-%s.idx",
path, sha1_to_hex(target->sha1)); path, sha1_to_hex(target->sha1));
copy_file(filename, sha1_pack_index_name(target->sha1), copy_file(filename, sha1_pack_index_name(target->sha1),
sha1_to_hex(target->sha1)); sha1_to_hex(target->sha1), 1);
install_packed_git(target); install_packed_git(target);
return 0; return 0;
} }
@ -154,7 +161,7 @@ static int fetch_file(const unsigned char *sha1)
filename[object_name_start+1] = hex[1]; filename[object_name_start+1] = hex[1];
filename[object_name_start+2] = '/'; filename[object_name_start+2] = '/';
strcpy(filename + object_name_start + 3, hex + 2); strcpy(filename + object_name_start + 3, hex + 2);
return copy_file(filename, dest_filename, hex); return copy_file(filename, dest_filename, hex, 0);
} }
int fetch(unsigned char *sha1) int fetch(unsigned char *sha1)