]> git.ipfire.org Git - thirdparty/git.git/commitdiff
packfile: pass down repository to `has_object[_kept]_pack`
authorKarthik Nayak <karthik.188@gmail.com>
Tue, 3 Dec 2024 14:43:59 +0000 (15:43 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Dec 2024 23:21:54 +0000 (08:21 +0900)
The functions `has_object[_kept]_pack` currently rely 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 these
functions and any related ones.

Signed-off-by: Karthik Nayak <karthik.188@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/count-objects.c
builtin/fsck.c
builtin/pack-objects.c
diff.c
list-objects.c
pack-bitmap.c
packfile.c
packfile.h
prune-packed.c
reachable.c
revision.c

index 04d80887e0eb98b13326b406c879a1be51f42f40..1e89148ed742a861903a15a1fca4bb95a925ac56 100644 (file)
@@ -67,7 +67,7 @@ static int count_loose(const struct object_id *oid, const char *path,
        else {
                loose_size += on_disk_bytes(st);
                loose++;
-               if (verbose && has_object_pack(oid))
+               if (verbose && has_object_pack(the_repository, oid))
                        packed_loose++;
        }
        return 0;
index 7f4e2f0414327166043b90c0b4ace66dbbdf4da3..bb56eb98acc7524deba5efdf4fe43718dffb828a 100644 (file)
@@ -272,7 +272,7 @@ static void check_reachable_object(struct object *obj)
        if (!(obj->flags & HAS_OBJ)) {
                if (is_promisor_object(&obj->oid))
                        return;
-               if (has_object_pack(&obj->oid))
+               if (has_object_pack(the_repository, &obj->oid))
                        return; /* it is in pack - forget about it */
                printf_ln(_("missing %s %s"),
                          printable_type(&obj->oid, obj->type),
index 080071426710da080464923e0671f0a220ba4ddf..0f32e92a3a36d76212352a681b10fdc748b3438a 100644 (file)
@@ -1529,7 +1529,7 @@ static int want_found_object(const struct object_id *oid, int exclude,
                        return 0;
                if (ignore_packed_keep_in_core && p->pack_keep_in_core)
                        return 0;
-               if (has_object_kept_pack(oid, flags))
+               if (has_object_kept_pack(p->repo, oid, flags))
                        return 0;
        }
 
@@ -3627,7 +3627,7 @@ static void show_cruft_commit(struct commit *commit, void *data)
 
 static int cruft_include_check_obj(struct object *obj, void *data UNUSED)
 {
-       return !has_object_kept_pack(&obj->oid, IN_CORE_KEEP_PACKS);
+       return !has_object_kept_pack(to_pack.repo, &obj->oid, IN_CORE_KEEP_PACKS);
 }
 
 static int cruft_include_check(struct commit *commit, void *data)
diff --git a/diff.c b/diff.c
index dceac20d18f03dfb72632f4466ed5a8a8e51bc14..266ddf18e737b903aad81dfb68704e7a07a5fc7a 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -4041,7 +4041,8 @@ static int reuse_worktree_file(struct index_state *istate,
         * objects however would tend to be slower as they need
         * to be individually opened and inflated.
         */
-       if (!FAST_WORKING_DIRECTORY && !want_file && has_object_pack(oid))
+       if (!FAST_WORKING_DIRECTORY && !want_file &&
+           has_object_pack(istate->repo, oid))
                return 0;
 
        /*
index 985d008799d0bb20a56ccaf6f821c699125373f6..31236a8dc918727747f6ab9b323cc3472b11156f 100644 (file)
@@ -41,7 +41,8 @@ static void show_object(struct traversal_context *ctx,
 {
        if (!ctx->show_object)
                return;
-       if (ctx->revs->unpacked && has_object_pack(&object->oid))
+       if (ctx->revs->unpacked && has_object_pack(ctx->revs->repo,
+                                                  &object->oid))
                return;
 
        ctx->show_object(object, name, ctx->show_data);
index 4fa9dfc771a30545281b8a5e2b7d26dc5682c285..d34ba9909af7e5513e62428dc5ea2a065d419437 100644 (file)
@@ -1889,7 +1889,7 @@ static void filter_packed_objects_from_bitmap(struct bitmap_index *bitmap_git,
                bitmap_unset(result, i);
 
        for (i = 0; i < eindex->count; ++i) {
-               if (has_object_pack(&eindex->objects[i]->oid))
+               if (has_object_pack(the_repository, &eindex->objects[i]->oid))
                        bitmap_unset(result, objects_nr + i);
        }
 }
index 1015dac6dbcef326ea65bf7a971b2793d325c30b..e7dd2702174e87ddd7bd0442c68d861844b085f3 100644 (file)
@@ -2143,16 +2143,17 @@ int find_kept_pack_entry(struct repository *r,
        return 0;
 }
 
-int has_object_pack(const struct object_id *oid)
+int has_object_pack(struct repository *r, const struct object_id *oid)
 {
        struct pack_entry e;
-       return find_pack_entry(the_repository, oid, &e);
+       return find_pack_entry(r, oid, &e);
 }
 
-int has_object_kept_pack(const struct object_id *oid, unsigned flags)
+int has_object_kept_pack(struct repository *r, const struct object_id *oid,
+                        unsigned flags)
 {
        struct pack_entry e;
-       return find_kept_pack_entry(the_repository, oid, flags, &e);
+       return find_kept_pack_entry(r, oid, flags, &e);
 }
 
 int for_each_object_in_pack(struct packed_git *p,
index 51187f2393f35300ca0ff7d334b22206618bdb56..b09fb2c530a68d7f72683e1aa448dd433f9dcba3 100644 (file)
@@ -193,8 +193,9 @@ const struct packed_git *has_packed_and_bad(struct repository *, const struct ob
 int find_pack_entry(struct repository *r, const struct object_id *oid, struct pack_entry *e);
 int find_kept_pack_entry(struct repository *r, const struct object_id *oid, unsigned flags, struct pack_entry *e);
 
-int has_object_pack(const struct object_id *oid);
-int has_object_kept_pack(const struct object_id *oid, unsigned flags);
+int has_object_pack(struct repository *r, const struct object_id *oid);
+int has_object_kept_pack(struct repository *r, const struct object_id *oid,
+                        unsigned flags);
 
 /*
  * Return 1 if an object in a promisor packfile is or refers to the given
index 2bb99c29dfb3c095f183fed97ac7a87d166fc790..d1c65ab10ed6004aae8265ce05f8db9ae3a33ad9 100644 (file)
@@ -24,7 +24,7 @@ static int prune_object(const struct object_id *oid, const char *path,
 {
        int *opts = data;
 
-       if (!has_object_pack(oid))
+       if (!has_object_pack(the_repository, oid))
                return 0;
 
        if (*opts & PRUNE_PACKED_DRY_RUN)
index 3e9b3dd0a46cb410b8f032784115c78084c5dbd9..09d2c5007994c86f8895f38ea56b61f55b3c2059 100644 (file)
@@ -239,7 +239,7 @@ static int want_recent_object(struct recent_data *data,
                              const struct object_id *oid)
 {
        if (data->ignore_in_core_kept_packs &&
-           has_object_kept_pack(oid, IN_CORE_KEEP_PACKS))
+           has_object_kept_pack(data->revs->repo, oid, IN_CORE_KEEP_PACKS))
                return 0;
        return 1;
 }
index f5f5b84f2b083657bcc98950b5c294314e52d37a..d1d152a67b830f4c3ddf9d321a06e1de76684834 100644 (file)
@@ -4103,10 +4103,10 @@ enum commit_action get_commit_action(struct rev_info *revs, struct commit *commi
 {
        if (commit->object.flags & SHOWN)
                return commit_ignore;
-       if (revs->unpacked && has_object_pack(&commit->object.oid))
+       if (revs->unpacked && has_object_pack(revs->repo, &commit->object.oid))
                return commit_ignore;
        if (revs->no_kept_objects) {
-               if (has_object_kept_pack(&commit->object.oid,
+               if (has_object_kept_pack(revs->repo, &commit->object.oid,
                                         revs->keep_pack_cache_flags))
                        return commit_ignore;
        }