diff --git a/odb/source-packed.c b/odb/source-packed.c index 0edea5356d..9cfa02b7a2 100644 --- a/odb/source-packed.c +++ b/odb/source-packed.c @@ -143,7 +143,7 @@ static bool should_exclude_pack(struct packed_git *p, enum odb_for_each_object_f } static int for_each_prefixed_object_in_midx( - struct odb_source_packed *store, + struct odb_source_packed *source, struct multi_pack_index *m, const struct odb_for_each_object_options *opts, struct odb_source_packed_for_each_object_wrapper_data *data) @@ -170,6 +170,7 @@ static int for_each_prefixed_object_in_midx( */ for (i = first; i < num; i++) { const struct object_id *current = NULL; + struct packed_git *pack; struct object_id oid; current = nth_midxed_object_oid(&oid, m, i); @@ -177,9 +178,8 @@ static int for_each_prefixed_object_in_midx( if (!match_hash(len, opts->prefix->hash, current->hash)) break; - if (opts->flags) { + if (opts->flags || data->request) { uint32_t pack_id = nth_midxed_pack_int_id(m, i); - struct packed_git *pack; if (prepare_midx_pack(m, pack_id)) { pack_errors = true; @@ -193,9 +193,9 @@ static int for_each_prefixed_object_in_midx( if (data->request) { struct object_info oi = *data->request; + off_t offset = nth_midxed_offset(m, i); - ret = odb_source_read_object_info(&store->base, current, - &oi, 0); + ret = packed_object_info(source, pack, offset, &oi); if (ret) goto out; @@ -219,7 +219,7 @@ out: } static int for_each_prefixed_object_in_pack( - struct odb_source_packed *store, + struct odb_source_packed *source, struct packed_git *p, const struct odb_for_each_object_options *opts, struct odb_source_packed_for_each_object_wrapper_data *data) @@ -246,8 +246,9 @@ static int for_each_prefixed_object_in_pack( if (data->request) { struct object_info oi = *data->request; + off_t offset = nth_packed_object_offset(p, i); - ret = odb_source_read_object_info(&store->base, &oid, &oi, 0); + ret = packed_object_info(source, p, offset, &oi); if (ret) goto out;