If we've already looked at a packfile and determined it isn't valid/usable as a pack, we shouldn't try to use it again in the future either. This avoids multiple error messages from the same packfile. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- cache.h | 1 + sha1_file.c | 5 +++++ 2 files changed, 6 insertions(+), 0 deletions(-) diff --git a/cache.h b/cache.h index 9873ee9..64c2d3f 100644 --- a/cache.h +++ b/cache.h @@ -357,6 +357,7 @@ extern struct packed_git { off_t pack_size; int pack_fd; int pack_local; + unsigned invalid:1; unsigned char sha1[20]; /* something like ".git/objects/pack/xxxxx.pack" */ char pack_name[FLEX_ARRAY]; /* more */ diff --git a/sha1_file.c b/sha1_file.c index ba1c799..9f6e94e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -714,6 +714,7 @@ struct packed_git *add_packed_git(char *path, int path_len, int local) p->next = NULL; p->windows = NULL; p->pack_fd = -1; + p->invalid = 0; p->pack_local = local; if ((path_len > 44) && !get_sha1_hex(path + path_len - 44, sha1)) hashcpy(p->sha1, sha1); @@ -746,6 +747,7 @@ struct packed_git *parse_pack_index_file(const unsigned char *sha1, char *idx_pa p->next = NULL; p->windows = NULL; p->pack_fd = -1; + p->invalid = 0; hashcpy(p->sha1, sha1); return p; } @@ -1395,6 +1397,8 @@ static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e, cons prepare_packed_git(); for (p = packed_git; p; p = p->next) { + if (p->invalid) + continue; if (ignore_packed) { const char **ig; for (ig = ignore_packed; *ig; ig++) @@ -1418,6 +1422,7 @@ static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e, cons close(p->pack_fd); p->pack_fd = -1; } + p->invalid = 1; error("packfile %s cannot be accessed", p->pack_name); continue; } -- 1.5.0.rc3.1.ge4b0e - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html