diff options
author | Derrick Stolee <stolee@gmail.com> | 2018-07-12 21:39:39 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-07-20 20:27:29 +0200 |
commit | 17c35c89698c1b9e130ae9a3dc9c016b353308d8 (patch) | |
tree | dfb340c553556c5da84075e141eb4fe688a3c43a /packfile.c | |
parent | midx: prevent duplicate packfile loads (diff) | |
download | git-17c35c89698c1b9e130ae9a3dc9c016b353308d8.tar.xz git-17c35c89698c1b9e130ae9a3dc9c016b353308d8.zip |
packfile: skip loading index if in multi-pack-index
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'packfile.c')
-rw-r--r-- | packfile.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/packfile.c b/packfile.c index 2c819a0ad8..e6ecf12ab5 100644 --- a/packfile.c +++ b/packfile.c @@ -469,8 +469,19 @@ static int open_packed_git_1(struct packed_git *p) ssize_t read_result; const unsigned hashsz = the_hash_algo->rawsz; - if (!p->index_data && open_pack_index(p)) - return error("packfile %s index unavailable", p->pack_name); + if (!p->index_data) { + struct multi_pack_index *m; + const char *pack_name = strrchr(p->pack_name, '/'); + + for (m = the_repository->objects->multi_pack_index; + m; m = m->next) { + if (midx_contains_pack(m, pack_name)) + break; + } + + if (!m && open_pack_index(p)) + return error("packfile %s index unavailable", p->pack_name); + } if (!pack_max_fds) { unsigned int max_fds = get_max_fd_limit(); @@ -521,6 +532,10 @@ static int open_packed_git_1(struct packed_git *p) " supported (try upgrading GIT to a newer version)", p->pack_name, ntohl(hdr.hdr_version)); + /* Skip index checking if in multi-pack-index */ + if (!p->index_data) + return 0; + /* Verify the pack matches its index. */ if (p->num_objects != ntohl(hdr.hdr_entries)) return error("packfile %s claims to have %"PRIu32" objects" |