@@ -131,7 +131,7 @@ int cmd_count_objects(int argc,
for (p = get_all_packs(the_repository); p; p = p->next) {
if (!p->pack_local)
continue;
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
continue;
packed += p->num_objects;
size_pack += p->pack_size + p->index_size;
@@ -988,7 +988,7 @@ int cmd_fsck(int argc,
if (show_progress) {
for (p = get_all_packs(the_repository); p;
p = p->next) {
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
continue;
total += p->num_objects;
}
@@ -1656,7 +1656,7 @@ static void read_idx_option(struct pack_idx_option *opts, const char *pack_name)
if (!p)
die(_("Cannot open existing pack file '%s'"), pack_name);
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
die(_("Cannot open existing pack idx file for '%s'"), pack_name);
/* Read the attributes from the existing idx file */
@@ -3902,7 +3902,7 @@ static void show_edge(struct commit *commit)
add_preferred_base(&commit->object.oid);
}
-static int add_object_in_unpacked_pack(struct repository *repo UNUSED,
+static int add_object_in_unpacked_pack(struct repository *repo,
const struct object_id *oid,
struct packed_git *pack,
uint32_t pos,
@@ -3913,7 +3913,7 @@ static int add_object_in_unpacked_pack(struct repository *repo UNUSED,
time_t mtime;
if (pack->is_cruft) {
- if (load_pack_mtimes(pack) < 0)
+ if (load_pack_mtimes(repo, pack) < 0)
die(_("could not load cruft pack .mtimes"));
mtime = nth_packed_mtime(pack, pos);
} else {
@@ -4035,7 +4035,7 @@ static void loosen_unused_packed_objects(void)
if (!p->pack_local || p->pack_keep || p->pack_keep_in_core)
continue;
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
die(_("cannot open pack index"));
for (i = 0; i < p->num_objects; i++) {
@@ -545,7 +545,7 @@ static struct pack_list * add_pack(struct packed_git *p)
l.pack = p;
llist_init(&l.remaining_objects);
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
return NULL;
base = p->index_data;
@@ -461,7 +461,7 @@ struct pack_geometry {
static uint32_t geometry_pack_weight(struct packed_git *p)
{
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
die(_("cannot open index for %s"), p->pack_name);
return p->num_objects;
}
@@ -1920,7 +1920,7 @@ static int fill_oids_from_packs(struct write_commit_graph_context *ctx,
ret = error(_("error adding pack %s"), packname.buf);
goto cleanup;
}
- if (open_pack_index(p)) {
+ if (open_pack_index(the_repository, p)) {
ret = error(_("error opening index for %s"), packname.buf);
goto cleanup;
}
@@ -161,7 +161,7 @@ static void add_pack_to_midx(const char *full_path, size_t full_path_len,
return;
}
- if (open_pack_index(p)) {
+ if (open_pack_index(the_repository, p)) {
warning(_("failed to open pack-index '%s'"),
full_path);
close_pack(p);
@@ -301,8 +301,8 @@ static void midx_fanout_add_pack_fanout(struct midx_fanout *fanout,
uint32_t cur_object;
if (cur_fanout)
- start = get_pack_fanout(pack, cur_fanout - 1);
- end = get_pack_fanout(pack, cur_fanout);
+ start = get_pack_fanout(the_repository, pack, cur_fanout - 1);
+ end = get_pack_fanout(the_repository, pack, cur_fanout);
for (cur_object = start; cur_object < end; cur_object++) {
midx_fanout_grow(fanout, fanout->nr + 1);
@@ -950,7 +950,7 @@ static int fill_packs_from_midx(struct write_midx_context *ctx,
return 1;
}
- if (open_pack_index(m->packs[i]))
+ if (open_pack_index(the_repository, m->packs[i]))
die(_("could not open index for %s"),
m->packs[i]->pack_name);
}
@@ -1612,7 +1612,7 @@ static int want_included_pack(struct repository *r,
return 0;
if (p->is_cruft)
return 0;
- if (open_pack_index(p) || !p->num_objects)
+ if (open_pack_index(r, p) || !p->num_objects)
return 0;
return 1;
}
@@ -966,7 +966,7 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag
continue;
}
- if (open_pack_index(e.p)) {
+ if (open_pack_index(the_repository, e.p)) {
midx_report(_("failed to load pack-index for packfile %s"),
e.p->pack_name);
break;
@@ -175,7 +175,7 @@ static void unique_in_pack(struct packed_git *p,
if (p->multi_pack_index)
return;
- if (open_pack_index(p) || !p->num_objects)
+ if (open_pack_index(ds->repo, p) || !p->num_objects)
return;
num = p->num_objects;
@@ -761,7 +761,7 @@ static void find_abbrev_len_for_pack(struct packed_git *p,
if (p->multi_pack_index)
return;
- if (open_pack_index(p) || !p->num_objects)
+ if (open_pack_index(mad->repo, p) || !p->num_objects)
return;
num = p->num_objects;
@@ -176,7 +176,7 @@ int verify_pack_index(struct packed_git *p)
{
int err = 0;
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
return error("packfile %s index not opened", p->pack_name);
/* Verify SHA1 sum of the index file */
@@ -97,7 +97,7 @@ static int load_pack_mtimes_file(char *mtimes_file,
return ret;
}
-int load_pack_mtimes(struct packed_git *p)
+int load_pack_mtimes(struct repository *repo, struct packed_git *p)
{
char *mtimes_name = NULL;
int ret = 0;
@@ -107,7 +107,7 @@ int load_pack_mtimes(struct packed_git *p)
if (p->mtimes_map)
return ret; /* already loaded */
- ret = open_pack_index(p);
+ ret = open_pack_index(repo, p);
if (ret < 0)
goto cleanup;
@@ -5,12 +5,13 @@
#define MTIMES_VERSION 1
struct packed_git;
+struct repository;
/*
* Loads the .mtimes file corresponding to "p", if any, returning zero
* on success.
*/
-int load_pack_mtimes(struct packed_git *p);
+int load_pack_mtimes(struct repository *repo, struct packed_git *p);
/* Returns the mtime associated with the object at position "pos" (in
* lexicographic/index order) in pack "p".
@@ -178,7 +178,7 @@ static int create_pack_revindex_in_memory(struct packed_git *p)
if (git_env_bool(GIT_TEST_REV_INDEX_DIE_IN_MEMORY, 0))
die("dying as requested by '%s'",
GIT_TEST_REV_INDEX_DIE_IN_MEMORY);
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
return -1;
create_pack_revindex(p);
return 0;
@@ -274,7 +274,7 @@ int load_pack_revindex_from_disk(struct packed_git *p)
{
char *revindex_name;
int ret;
- if (open_pack_index(p))
+ if (open_pack_index(the_repository, p))
return -1;
revindex_name = pack_revindex_filename(p);
@@ -84,13 +84,14 @@ void pack_report(void)
* consistency checks, then record its information to p. Return 0 on
* success.
*/
-static int check_packed_git_idx(const char *path, struct packed_git *p)
+static int check_packed_git_idx(struct repository *repo, const char *path,
+ struct packed_git *p)
{
void *idx_map;
size_t idx_size;
int fd = git_open(path), ret;
struct stat st;
- const unsigned int hashsz = the_hash_algo->rawsz;
+ const unsigned int hashsz = repo->hash_algo->rawsz;
if (fd < 0)
return -1;
@@ -194,7 +195,7 @@ int load_idx(const char *path, const unsigned int hashsz, void *idx_map,
return 0;
}
-int open_pack_index(struct packed_git *p)
+int open_pack_index(struct repository *repo, struct packed_git *p)
{
char *idx_name;
size_t len;
@@ -206,17 +207,18 @@ int open_pack_index(struct packed_git *p)
if (!strip_suffix(p->pack_name, ".pack", &len))
BUG("pack_name does not end in .pack");
idx_name = xstrfmt("%.*s.idx", (int)len, p->pack_name);
- ret = check_packed_git_idx(idx_name, p);
+ ret = check_packed_git_idx(repo, idx_name, p);
free(idx_name);
return ret;
}
-uint32_t get_pack_fanout(struct packed_git *p, uint32_t value)
+uint32_t get_pack_fanout(struct repository *repo, struct packed_git *p,
+ uint32_t value)
{
const uint32_t *level1_ofs = p->index_data;
if (!level1_ofs) {
- if (open_pack_index(p))
+ if (open_pack_index(repo, p))
return 0;
level1_ofs = p->index_data;
}
@@ -246,7 +248,7 @@ struct packed_git *parse_pack_index(struct repository *repo,
memcpy(p->pack_name, path, alloc); /* includes NUL */
hashcpy(p->hash, sha1, repo->hash_algo);
- if (check_packed_git_idx(idx_path, p)) {
+ if (check_packed_git_idx(repo, idx_path, p)) {
free(p);
return NULL;
}
@@ -544,7 +546,7 @@ static int open_packed_git_1(struct repository *repo, struct packed_git *p)
ssize_t read_result;
const unsigned hashsz = the_hash_algo->rawsz;
- if (open_pack_index(p))
+ if (open_pack_index(repo, p))
return error("packfile %s index unavailable", p->pack_name);
if (!pack_max_fds) {
@@ -951,7 +953,7 @@ unsigned long repo_approximate_object_count(struct repository *r)
for (m = get_multi_pack_index(r); m; m = m->next)
count += m->num_objects;
for (p = r->objects->packed_git; p; p = p->next) {
- if (open_pack_index(p))
+ if (open_pack_index(r, p))
continue;
count += p->num_objects;
}
@@ -1923,7 +1925,7 @@ int nth_packed_object_id(struct repository *repo, struct object_id *oid,
const unsigned char *index = p->index_data;
const unsigned int hashsz = repo->hash_algo->rawsz;
if (!index) {
- if (open_pack_index(p))
+ if (open_pack_index(repo, p))
return -1;
index = p->index_data;
}
@@ -1983,7 +1985,7 @@ off_t find_pack_entry_one(struct repository *repo, const unsigned char *sha1,
uint32_t result;
if (!index) {
- if (open_pack_index(p))
+ if (open_pack_index(repo, p))
return 0;
}
@@ -2226,7 +2228,7 @@ int for_each_packed_object(struct repository *repo, each_packed_object_fn cb,
if ((flags & FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS) &&
p->pack_keep)
continue;
- if (open_pack_index(p)) {
+ if (open_pack_index(repo, p)) {
pack_errors = 1;
continue;
}
@@ -97,7 +97,7 @@ void pack_report(void);
* mmap the index file for the specified packfile (if it is not
* already mmapped). Return 0 on success.
*/
-int open_pack_index(struct packed_git *);
+int open_pack_index(struct repository *repo, struct packed_git *);
/*
* munmap the index file for the specified packfile (if it is
@@ -107,7 +107,8 @@ void close_pack_index(struct packed_git *);
int close_pack_fd(struct packed_git *p);
-uint32_t get_pack_fanout(struct packed_git *p, uint32_t value);
+uint32_t get_pack_fanout(struct repository *repo, struct packed_git *p,
+ uint32_t value);
struct raw_object_store;
@@ -291,7 +291,7 @@ static int add_recent_packed(struct repository *repo,
if (obj && obj->flags & SEEN)
return 0;
if (p->is_cruft) {
- if (load_pack_mtimes(p) < 0)
+ if (load_pack_mtimes(repo, p) < 0)
die(_("could not load cruft pack .mtimes"));
mtime = nth_packed_mtime(p, pos);
}
@@ -11,7 +11,7 @@
static void dump_mtimes(struct packed_git *p)
{
uint32_t i;
- if (load_pack_mtimes(p) < 0)
+ if (load_pack_mtimes(the_repository, p) < 0)
die("could not load pack .mtimes");
for (i = 0; i < p->num_objects; i++) {
The function `open_pack_index` 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@gmail.com> --- builtin/count-objects.c | 2 +- builtin/fsck.c | 2 +- builtin/index-pack.c | 2 +- builtin/pack-objects.c | 6 +++--- builtin/pack-redundant.c | 2 +- builtin/repack.c | 2 +- commit-graph.c | 2 +- midx-write.c | 10 +++++----- midx.c | 2 +- object-name.c | 4 ++-- pack-check.c | 2 +- pack-mtimes.c | 4 ++-- pack-mtimes.h | 3 ++- pack-revindex.c | 4 ++-- packfile.c | 26 ++++++++++++++------------ packfile.h | 5 +++-- reachable.c | 2 +- t/helper/test-pack-mtimes.c | 2 +- 18 files changed, 43 insertions(+), 39 deletions(-)