diff mbox series

[v2,08/19] midx: teach `bsearch_midx()` about incremental MIDXs

Message ID 38bd45bd24436d3404b089dff5c3d85f4026da97.1721250704.git.me@ttaylorr.com (mailing list archive)
State Superseded
Headers show
Series midx: incremental multi-pack indexes, part one | expand

Commit Message

Taylor Blau July 17, 2024, 9:12 p.m. UTC
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>
---
 midx.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Jeff King Aug. 1, 2024, 10:07 a.m. UTC | #1
On Wed, Jul 17, 2024 at 05:12:19PM -0400, Taylor Blau wrote:

> 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.

OK. I think this could have just happened in the last patch, but no big
deal either way.

-Peff
diff mbox series

Patch

diff --git a/midx.c b/midx.c
index bb3fa43492..cd6e4afde4 100644
--- a/midx.c
+++ b/midx.c
@@ -343,7 +343,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,