Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> --- midx.c | 2 +- midx.h | 1 + packfile.c | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/midx.c b/midx.c index 3242646fe0..e46f392fa4 100644 --- a/midx.c +++ b/midx.c @@ -214,7 +214,7 @@ struct object_id *nth_midxed_object_oid(struct object_id *oid, return oid; } -static off_t nth_midxed_offset(struct midxed_git *m, uint32_t pos) +off_t nth_midxed_offset(struct midxed_git *m, uint32_t pos) { const unsigned char *offset_data; uint32_t offset32; diff --git a/midx.h b/midx.h index c1db58d8c4..6996b5ff6b 100644 --- a/midx.h +++ b/midx.h @@ -9,6 +9,7 @@ struct midxed_git *load_midxed_git(const char *object_dir); int bsearch_midx(const struct object_id *oid, struct midxed_git *m, uint32_t *result); +off_t nth_midxed_offset(struct midxed_git *m, uint32_t n); struct object_id *nth_midxed_object_oid(struct object_id *oid, struct midxed_git *m, uint32_t n); diff --git a/packfile.c b/packfile.c index 479cb69b9f..9b814c89c7 100644 --- a/packfile.c +++ b/packfile.c @@ -1794,6 +1794,21 @@ off_t find_pack_entry_one(const unsigned char *sha1, uint32_t result; if (!index) { + /* + * If we have a MIDX, then we want to + * check the MIDX for the offset instead. + */ + struct midxed_git *m; + + for (m = get_midxed_git(the_repository); m; m = m->next) { + if (midx_contains_pack(m, p->pack_name)) { + if (bsearch_midx(&oid, m, &result)) + return nth_midxed_offset(m, result); + + break; + } + } + if (open_pack_index(p)) return 0; } -- 2.18.0.rc1