Signed-off-by: Derrick Stolee <[email protected]>
---
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