]> git.ipfire.org Git - thirdparty/git.git/commitdiff
midx: teach `bsearch_midx()` about incremental MIDXs
authorTaylor Blau <me@ttaylorr.com>
Tue, 6 Aug 2024 15:37:33 +0000 (11:37 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 6 Aug 2024 19:01:37 +0000 (12:01 -0700)
Now that the special cases callers of `bsearch_midx()` have been dealt
with, teach `bsearch_midx()` to handle incremental MIDX chains.

The incremental MIDX-aware version of `bsearch_midx()` works by
repeatedly searching for a given OID in each layer along the
`->base_midx` pointer, stopping either when an exact match is found, or
the end of the chain is reached.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
midx.c

diff --git a/midx.c b/midx.c
index bd6e3f26c96ea15e88c8c35ae305929606005b44..83857cbd1ed7dbaf113cb65635078c4e1067ef65 100644 (file)
--- a/midx.c
+++ b/midx.c
@@ -344,7 +344,10 @@ int bsearch_one_midx(const struct object_id *oid, struct multi_pack_index *m,
 int bsearch_midx(const struct object_id *oid, struct multi_pack_index *m,
                 uint32_t *result)
 {
-               return bsearch_one_midx(oid, m, result);
+       for (; m; m = m->base_midx)
+               if (bsearch_one_midx(oid, m, result))
+                       return 1;
+       return 0;
 }
 
 struct object_id *nth_midxed_object_oid(struct object_id *oid,