"Derrick Stolee via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > > Much of the multi-pack-index code focuses on the multi_pack_index > struct, and so we only pass a pointer to the current one. However, > we will insert a dependency on the packed_git linked list in a > future change, so we will need a repository reference. Inserting > these parameters is a significant enough change to split out. > > Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > --- This is a good move in the loger term, but not a happy thing to do while your "expire" topic is still in flight, as the impact from updating the signature of prepare_midx_pack() and friends will break new callers in expire_midx_packs() etc. I am tempted to queue this and eject ds/midx-expire-repack for now, while checking how that topic would look like when rebased on top of these two patches. We'll see. Thanks. > builtin/multi-pack-index.c | 2 +- > builtin/pack-objects.c | 2 +- > midx.c | 22 ++++++++++++++-------- > midx.h | 7 ++++--- > packfile.c | 4 ++-- > 5 files changed, 22 insertions(+), 15 deletions(-) > > diff --git a/builtin/multi-pack-index.c b/builtin/multi-pack-index.c > index ae6e476ad5..72dfd3dadc 100644 > --- a/builtin/multi-pack-index.c > +++ b/builtin/multi-pack-index.c > @@ -46,7 +46,7 @@ int cmd_multi_pack_index(int argc, const char **argv, > if (!strcmp(argv[0], "write")) > return write_midx_file(opts.object_dir); > if (!strcmp(argv[0], "verify")) > - return verify_midx_file(opts.object_dir); > + return verify_midx_file(the_repository, opts.object_dir); > > die(_("unrecognized verb: %s"), argv[0]); > } > diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c > index 2d9a3bdc9d..e606b9ef03 100644 > --- a/builtin/pack-objects.c > +++ b/builtin/pack-objects.c > @@ -1078,7 +1078,7 @@ static int want_object_in_pack(const struct object_id *oid, > > for (m = get_multi_pack_index(the_repository); m; m = m->next) { > struct pack_entry e; > - if (fill_midx_entry(oid, &e, m)) { > + if (fill_midx_entry(the_repository, oid, &e, m)) { > struct packed_git *p = e.p; > off_t offset; > > diff --git a/midx.c b/midx.c > index d5d2e9522f..8b8faec35a 100644 > --- a/midx.c > +++ b/midx.c > @@ -201,7 +201,7 @@ void close_midx(struct multi_pack_index *m) > FREE_AND_NULL(m->pack_names); > } > > -int prepare_midx_pack(struct multi_pack_index *m, uint32_t pack_int_id) > +int prepare_midx_pack(struct repository *r, struct multi_pack_index *m, uint32_t pack_int_id) > { > struct strbuf pack_name = STRBUF_INIT; > > @@ -261,7 +261,10 @@ static uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos) > return get_be32(m->chunk_object_offsets + pos * MIDX_CHUNK_OFFSET_WIDTH); > } > > -static int nth_midxed_pack_entry(struct multi_pack_index *m, struct pack_entry *e, uint32_t pos) > +static int nth_midxed_pack_entry(struct repository *r, > + struct multi_pack_index *m, > + struct pack_entry *e, > + uint32_t pos) > { > uint32_t pack_int_id; > struct packed_git *p; > @@ -271,7 +274,7 @@ static int nth_midxed_pack_entry(struct multi_pack_index *m, struct pack_entry * > > pack_int_id = nth_midxed_pack_int_id(m, pos); > > - if (prepare_midx_pack(m, pack_int_id)) > + if (prepare_midx_pack(r, m, pack_int_id)) > die(_("error preparing packfile from multi-pack-index")); > p = m->packs[pack_int_id]; > > @@ -301,14 +304,17 @@ static int nth_midxed_pack_entry(struct multi_pack_index *m, struct pack_entry * > return 1; > } > > -int fill_midx_entry(const struct object_id *oid, struct pack_entry *e, struct multi_pack_index *m) > +int fill_midx_entry(struct repository * r, > + const struct object_id *oid, > + struct pack_entry *e, > + struct multi_pack_index *m) > { > uint32_t pos; > > if (!bsearch_midx(oid, m, &pos)) > return 0; > > - return nth_midxed_pack_entry(m, e, pos); > + return nth_midxed_pack_entry(r, m, e, pos); > } > > /* Match "foo.idx" against either "foo.pack" _or_ "foo.idx". */ > @@ -1020,7 +1026,7 @@ static int compare_pair_pos_vs_id(const void *_a, const void *_b) > display_progress(progress, _n); \ > } while (0) > > -int verify_midx_file(const char *object_dir) > +int verify_midx_file(struct repository *r, const char *object_dir) > { > struct pair_pos_vs_id *pairs = NULL; > uint32_t i; > @@ -1034,7 +1040,7 @@ int verify_midx_file(const char *object_dir) > progress = start_progress(_("Looking for referenced packfiles"), > m->num_packs); > for (i = 0; i < m->num_packs; i++) { > - if (prepare_midx_pack(m, i)) > + if (prepare_midx_pack(r, m, i)) > midx_report("failed to load pack in position %d", i); > > display_progress(progress, i + 1); > @@ -1099,7 +1105,7 @@ int verify_midx_file(const char *object_dir) > > nth_midxed_object_oid(&oid, m, pairs[i].pos); > > - if (!fill_midx_entry(&oid, &e, m)) { > + if (!fill_midx_entry(r, &oid, &e, m)) { > midx_report(_("failed to load pack entry for oid[%d] = %s"), > pairs[i].pos, oid_to_hex(&oid)); > continue; > diff --git a/midx.h b/midx.h > index 26dd042d63..3eb29731f2 100644 > --- a/midx.h > +++ b/midx.h > @@ -5,6 +5,7 @@ > > struct object_id; > struct pack_entry; > +struct repository; > > #define GIT_TEST_MULTI_PACK_INDEX "GIT_TEST_MULTI_PACK_INDEX" > > @@ -37,18 +38,18 @@ struct multi_pack_index { > }; > > struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local); > -int prepare_midx_pack(struct multi_pack_index *m, uint32_t pack_int_id); > +int prepare_midx_pack(struct repository *r, struct multi_pack_index *m, uint32_t pack_int_id); > int bsearch_midx(const struct object_id *oid, struct multi_pack_index *m, uint32_t *result); > struct object_id *nth_midxed_object_oid(struct object_id *oid, > struct multi_pack_index *m, > uint32_t n); > -int fill_midx_entry(const struct object_id *oid, struct pack_entry *e, struct multi_pack_index *m); > +int fill_midx_entry(struct repository *r, const struct object_id *oid, struct pack_entry *e, struct multi_pack_index *m); > int midx_contains_pack(struct multi_pack_index *m, const char *idx_or_pack_name); > int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local); > > int write_midx_file(const char *object_dir); > void clear_midx_file(struct repository *r); > -int verify_midx_file(const char *object_dir); > +int verify_midx_file(struct repository *r, const char *object_dir); > > void close_midx(struct multi_pack_index *m); > > diff --git a/packfile.c b/packfile.c > index cdf6b6ec34..7b94a14726 100644 > --- a/packfile.c > +++ b/packfile.c > @@ -1035,7 +1035,7 @@ struct packed_git *get_all_packs(struct repository *r) > for (m = r->objects->multi_pack_index; m; m = m->next) { > uint32_t i; > for (i = 0; i < m->num_packs; i++) { > - if (!prepare_midx_pack(m, i)) { > + if (!prepare_midx_pack(r, m, i)) { > m->packs[i]->next = p; > p = m->packs[i]; > } > @@ -1998,7 +1998,7 @@ int find_pack_entry(struct repository *r, const struct object_id *oid, struct pa > return 0; > > for (m = r->objects->multi_pack_index; m; m = m->next) { > - if (fill_midx_entry(oid, e, m)) > + if (fill_midx_entry(r, oid, e, m)) > return 1; > }