The function `nth_packed_object_id` currently relies on the global variable `the_repository`. To eliminate global variable usage in `packfile.c`, we should progressively shift the dependency on the_repository to higher layers. Let's remove its usage from this function and any related ones. Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> --- builtin/pack-objects.c | 6 +++--- midx-write.c | 2 +- object-name.c | 8 ++++---- pack-bitmap.c | 2 +- pack-check.c | 2 +- packfile.c | 21 ++++++++++----------- packfile.h | 3 ++- t/helper/test-pack-mtimes.c | 2 +- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index c2555d4986..adf55d892f 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1059,7 +1059,7 @@ static void write_reused_pack_one(struct packed_git *reuse_packfile, (uintmax_t)base_offset, reuse_packfile->pack_name); - nth_packed_object_id(&base_oid, reuse_packfile, + nth_packed_object_id(the_repository, &base_oid, reuse_packfile, pack_pos_to_index(reuse_packfile, base_pos)); len = encode_in_pack_object_header(header, sizeof(header), @@ -2141,7 +2141,7 @@ static void check_object(struct object_entry *entry, uint32_t object_index) uint32_t pos; if (offset_to_pack_pos(p, ofs, &pos) < 0) goto give_up; - if (!nth_packed_object_id(&base_ref, p, + if (!nth_packed_object_id(the_repository, &base_ref, p, pack_pos_to_index(p, pos))) have_base = 1; } @@ -4036,7 +4036,7 @@ static void loosen_unused_packed_objects(void) die(_("cannot open pack index")); for (i = 0; i < p->num_objects; i++) { - nth_packed_object_id(&oid, p, i); + nth_packed_object_id(the_repository, &oid, p, i); if (!packlist_find(&to_pack, &oid) && !has_sha1_pack_kept_or_nonlocal(&oid) && !loosened_object_can_be_discarded(&oid, p->mtime)) { diff --git a/midx-write.c b/midx-write.c index c57726ef94..4696b8326c 100644 --- a/midx-write.c +++ b/midx-write.c @@ -227,7 +227,7 @@ static void fill_pack_entry(uint32_t pack_int_id, struct pack_midx_entry *entry, int preferred) { - if (nth_packed_object_id(&entry->oid, p, cur_object) < 0) + if (nth_packed_object_id(the_repository, &entry->oid, p, cur_object) < 0) die(_("failed to locate object %d in packfile"), cur_object); entry->pack_int_id = pack_int_id; diff --git a/object-name.c b/object-name.c index c892fbe80a..43023884ef 100644 --- a/object-name.c +++ b/object-name.c @@ -188,7 +188,7 @@ static void unique_in_pack(struct packed_git *p, */ for (i = first; i < num && !ds->ambiguous; i++) { struct object_id oid; - nth_packed_object_id(&oid, p, i); + nth_packed_object_id(ds->repo, &oid, p, i); if (!match_hash(len, ds->bin_pfx.hash, oid.hash)) break; update_candidates(ds, &oid); @@ -776,14 +776,14 @@ static void find_abbrev_len_for_pack(struct packed_git *p, */ mad->init_len = 0; if (!match) { - if (!nth_packed_object_id(&oid, p, first)) + if (!nth_packed_object_id(mad->repo, &oid, p, first)) extend_abbrev_len(&oid, mad); } else if (first < num - 1) { - if (!nth_packed_object_id(&oid, p, first + 1)) + if (!nth_packed_object_id(mad->repo, &oid, p, first + 1)) extend_abbrev_len(&oid, mad); } if (first > 0) { - if (!nth_packed_object_id(&oid, p, first - 1)) + if (!nth_packed_object_id(mad->repo, &oid, p, first - 1)) extend_abbrev_len(&oid, mad); } mad->init_len = mad->cur_len; diff --git a/pack-bitmap.c b/pack-bitmap.c index d959e30682..96716c785b 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -318,7 +318,7 @@ static int nth_bitmap_object_oid(struct bitmap_index *index, { if (index->midx) return nth_midxed_object_oid(oid, index->midx, n) ? 0 : -1; - return nth_packed_object_id(oid, index->pack, n); + return nth_packed_object_id(the_repository, oid, index->pack, n); } static int load_bitmap_entries_v1(struct bitmap_index *index) diff --git a/pack-check.c b/pack-check.c index e2c3b264e7..a5551809c1 100644 --- a/pack-check.c +++ b/pack-check.c @@ -111,7 +111,7 @@ static int verify_packfile(struct repository *r, off_t curpos; int data_valid; - if (nth_packed_object_id(&oid, p, entries[i].nr) < 0) + if (nth_packed_object_id(r, &oid, p, entries[i].nr) < 0) BUG("unable to get oid of object %lu from %s", (unsigned long)entries[i].nr, p->pack_name); diff --git a/packfile.c b/packfile.c index 54f3b9f0a7..92c919d628 100644 --- a/packfile.c +++ b/packfile.c @@ -1273,7 +1273,7 @@ static int get_delta_base_oid(struct repository *repo, struct packed_git *p, if (offset_to_pack_pos(p, base_offset, &base_pos) < 0) return -1; - return nth_packed_object_id(oid, p, + return nth_packed_object_id(repo, oid, p, pack_pos_to_index(p, base_pos)); } else return -1; @@ -1288,7 +1288,7 @@ static int retry_bad_packed_offset(struct repository *r, struct object_id oid; if (offset_to_pack_pos(p, obj_offset, &pos) < 0) return OBJ_BAD; - nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos)); + nth_packed_object_id(r, &oid, p, pack_pos_to_index(p, pos)); mark_bad_packed_object(p, &oid); type = oid_object_info(r, &oid, NULL); if (type <= OBJ_NONE) @@ -1723,7 +1723,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset, index_pos = pack_pos_to_index(p, pack_pos); if (check_pack_crc(p, &w_curs, obj_offset, len, index_pos)) { struct object_id oid; - nth_packed_object_id(&oid, p, index_pos); + nth_packed_object_id(r, &oid, p, index_pos); error("bad packed object CRC for %s", oid_to_hex(&oid)); mark_bad_packed_object(p, &oid); @@ -1813,7 +1813,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset, if (!(offset_to_pack_pos(p, obj_offset, &pos))) { struct object_info oi = OBJECT_INFO_INIT; - nth_packed_object_id(&base_oid, p, + nth_packed_object_id(r, &base_oid, p, pack_pos_to_index(p, pos)); error("failed to read delta base object %s" " at offset %"PRIuMAX" from %s", @@ -1917,12 +1917,11 @@ int bsearch_pack(const struct object_id *oid, const struct packed_git *p, uint32 index_lookup, index_lookup_width, result); } -int nth_packed_object_id(struct object_id *oid, - struct packed_git *p, - uint32_t n) +int nth_packed_object_id(struct repository *repo, struct object_id *oid, + struct packed_git *p, uint32_t n) { const unsigned char *index = p->index_data; - const unsigned int hashsz = the_hash_algo->rawsz; + const unsigned int hashsz = repo->hash_algo->rawsz; if (!index) { if (open_pack_index(p)) return -1; @@ -1933,11 +1932,11 @@ int nth_packed_object_id(struct object_id *oid, index += 4 * 256; if (p->index_version == 1) { oidread(oid, index + st_add(st_mult(hashsz + 4, n), 4), - the_repository->hash_algo); + repo->hash_algo); } else { index += 8; oidread(oid, index + st_mult(hashsz, n), - the_repository->hash_algo); + repo->hash_algo); } return 0; } @@ -2194,7 +2193,7 @@ int for_each_object_in_pack(struct packed_git *p, else index_pos = i; - if (nth_packed_object_id(&oid, p, index_pos) < 0) + if (nth_packed_object_id(the_repository, &oid, p, index_pos) < 0) return error("unable to get sha1 of object %u in %s", index_pos, p->pack_name); diff --git a/packfile.h b/packfile.h index 050dc516b1..f744af6e9b 100644 --- a/packfile.h +++ b/packfile.h @@ -150,7 +150,8 @@ int bsearch_pack(const struct object_id *oid, const struct packed_git *p, uint32 * parameter. Open the index if it is not already open. Returns 0 on success, * negative otherwise. */ -int nth_packed_object_id(struct object_id *, struct packed_git *, uint32_t n); +int nth_packed_object_id(struct repository *repo, struct object_id *, + struct packed_git *, uint32_t n); /* * Return the offset of the nth object within the specified packfile. diff --git a/t/helper/test-pack-mtimes.c b/t/helper/test-pack-mtimes.c index f8f9afbb5b..ebd980b308 100644 --- a/t/helper/test-pack-mtimes.c +++ b/t/helper/test-pack-mtimes.c @@ -16,7 +16,7 @@ static void dump_mtimes(struct packed_git *p) for (i = 0; i < p->num_objects; i++) { struct object_id oid; - if (nth_packed_object_id(&oid, p, i) < 0) + if (nth_packed_object_id(the_repository, &oid, p, i) < 0) die("could not load object id at position %"PRIu32, i); printf("%s %"PRIu32"\n", -- 2.47.0