Skip to content

Commit c87910b

Browse files
KarthikNayakgitster
authored andcommitted
packfile: pass down repository to for_each_packed_object
The function `for_each_packed_object` 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 closely related function `is_promisor_object`. Signed-off-by: Karthik Nayak <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent cc656f4 commit c87910b

15 files changed

+44
-35
lines changed

builtin/cat-file.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -827,15 +827,16 @@ static int batch_objects(struct batch_options *opt)
827827
cb.seen = &seen;
828828

829829
for_each_loose_object(batch_unordered_loose, &cb, 0);
830-
for_each_packed_object(batch_unordered_packed, &cb,
831-
FOR_EACH_OBJECT_PACK_ORDER);
830+
for_each_packed_object(the_repository, batch_unordered_packed,
831+
&cb, FOR_EACH_OBJECT_PACK_ORDER);
832832

833833
oidset_clear(&seen);
834834
} else {
835835
struct oid_array sa = OID_ARRAY_INIT;
836836

837837
for_each_loose_object(collect_loose_object, &sa, 0);
838-
for_each_packed_object(collect_packed_object, &sa, 0);
838+
for_each_packed_object(the_repository, collect_packed_object,
839+
&sa, 0);
839840

840841
oid_array_for_each_unique(&sa, batch_object_cb, &cb);
841842

builtin/fsck.c

+11-7
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ static int mark_object(struct object *obj, enum object_type type,
150150
return 0;
151151
obj->flags |= REACHABLE;
152152

153-
if (is_promisor_object(&obj->oid))
153+
if (is_promisor_object(the_repository, &obj->oid))
154154
/*
155155
* Further recursion does not need to be performed on this
156156
* object since it is a promisor object (so it does not need to
@@ -270,7 +270,7 @@ static void check_reachable_object(struct object *obj)
270270
* do a full fsck
271271
*/
272272
if (!(obj->flags & HAS_OBJ)) {
273-
if (is_promisor_object(&obj->oid))
273+
if (is_promisor_object(the_repository, &obj->oid))
274274
return;
275275
if (has_object_pack(the_repository, &obj->oid))
276276
return; /* it is in pack - forget about it */
@@ -391,7 +391,10 @@ static void check_connectivity(void)
391391
* traversal.
392392
*/
393393
for_each_loose_object(mark_loose_unreachable_referents, NULL, 0);
394-
for_each_packed_object(mark_packed_unreachable_referents, NULL, 0);
394+
for_each_packed_object(the_repository,
395+
mark_packed_unreachable_referents,
396+
NULL,
397+
0);
395398
}
396399

397400
/* Look up all the requirements, warn about missing objects.. */
@@ -488,7 +491,7 @@ static void fsck_handle_reflog_oid(const char *refname, struct object_id *oid,
488491
refname, timestamp);
489492
obj->flags |= USED;
490493
mark_object_reachable(obj);
491-
} else if (!is_promisor_object(oid)) {
494+
} else if (!is_promisor_object(the_repository, oid)) {
492495
error(_("%s: invalid reflog entry %s"),
493496
refname, oid_to_hex(oid));
494497
errors_found |= ERROR_REACHABLE;
@@ -531,7 +534,7 @@ static int fsck_handle_ref(const char *refname, const char *referent UNUSED, con
531534

532535
obj = parse_object(the_repository, oid);
533536
if (!obj) {
534-
if (is_promisor_object(oid)) {
537+
if (is_promisor_object(the_repository, oid)) {
535538
/*
536539
* Increment default_refs anyway, because this is a
537540
* valid ref.
@@ -966,7 +969,8 @@ int cmd_fsck(int argc,
966969

967970
if (connectivity_only) {
968971
for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
969-
for_each_packed_object(mark_packed_for_connectivity, NULL, 0);
972+
for_each_packed_object(the_repository,
973+
mark_packed_for_connectivity, NULL, 0);
970974
} else {
971975
prepare_alt_odb(the_repository);
972976
for (odb = the_repository->objects->odb; odb; odb = odb->next)
@@ -1011,7 +1015,7 @@ int cmd_fsck(int argc,
10111015
&oid);
10121016

10131017
if (!obj || !(obj->flags & HAS_OBJ)) {
1014-
if (is_promisor_object(&oid))
1018+
if (is_promisor_object(the_repository, &oid))
10151019
continue;
10161020
error(_("%s: object missing"), oid_to_hex(&oid));
10171021
errors_found |= ERROR_OBJECT;

builtin/pack-objects.c

+5-2
Original file line numberDiff line numberDiff line change
@@ -3858,7 +3858,8 @@ static void show_object__ma_allow_promisor(struct object *obj, const char *name,
38583858
* Quietly ignore EXPECTED missing objects. This avoids problems with
38593859
* staging them now and getting an odd error later.
38603860
*/
3861-
if (!has_object(the_repository, &obj->oid, 0) && is_promisor_object(&obj->oid))
3861+
if (!has_object(the_repository, &obj->oid, 0) &&
3862+
is_promisor_object(to_pack.repo, &obj->oid))
38623863
return;
38633864

38643865
show_object(obj, name, data);
@@ -3927,7 +3928,9 @@ static int add_object_in_unpacked_pack(const struct object_id *oid,
39273928

39283929
static void add_objects_in_unpacked_packs(void)
39293930
{
3930-
if (for_each_packed_object(add_object_in_unpacked_pack, NULL,
3931+
if (for_each_packed_object(to_pack.repo,
3932+
add_object_in_unpacked_pack,
3933+
NULL,
39313934
FOR_EACH_OBJECT_PACK_ORDER |
39323935
FOR_EACH_OBJECT_LOCAL_ONLY |
39333936
FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS |

builtin/repack.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
404404
* {type -> existing pack order} ordering when computing deltas instead
405405
* of a {type -> size} ordering, which may produce better deltas.
406406
*/
407-
for_each_packed_object(write_oid, &cmd,
407+
for_each_packed_object(the_repository, write_oid, &cmd,
408408
FOR_EACH_OBJECT_PROMISOR_ONLY);
409409

410410
if (cmd.in == -1) {

builtin/rev-list.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ static inline void finish_object__ma(struct object *obj)
121121
return;
122122

123123
case MA_ALLOW_PROMISOR:
124-
if (is_promisor_object(&obj->oid))
124+
if (is_promisor_object(the_repository, &obj->oid))
125125
return;
126126
die("unexpected missing %s object '%s'",
127127
type_name(obj->type), oid_to_hex(&obj->oid));

commit-graph.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1960,7 +1960,7 @@ static void fill_oids_from_all_packs(struct write_commit_graph_context *ctx)
19601960
ctx->progress = start_delayed_progress(
19611961
_("Finding commits for commit graph among packed objects"),
19621962
ctx->approx_nr_objects);
1963-
for_each_packed_object(add_packed_commits, ctx,
1963+
for_each_packed_object(ctx->r, add_packed_commits, ctx,
19641964
FOR_EACH_OBJECT_PACK_ORDER);
19651965
if (ctx->progress_done < ctx->approx_nr_objects)
19661966
display_progress(ctx->progress, ctx->approx_nr_objects);

fsck.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1295,7 +1295,7 @@ static int fsck_blobs(struct oidset *blobs_found, struct oidset *blobs_done,
12951295

12961296
buf = repo_read_object_file(the_repository, oid, &type, &size);
12971297
if (!buf) {
1298-
if (is_promisor_object(oid))
1298+
if (is_promisor_object(the_repository, oid))
12991299
continue;
13001300
ret |= report(options,
13011301
oid, OBJ_BLOB, msg_missing,

list-objects.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ static void process_blob(struct traversal_context *ctx,
7575
*/
7676
if (ctx->revs->exclude_promisor_objects &&
7777
!repo_has_object_file(the_repository, &obj->oid) &&
78-
is_promisor_object(&obj->oid))
78+
is_promisor_object(ctx->revs->repo, &obj->oid))
7979
return;
8080

8181
pathlen = path->len;
@@ -180,7 +180,7 @@ static void process_tree(struct traversal_context *ctx,
180180
* an incomplete list of missing objects.
181181
*/
182182
if (revs->exclude_promisor_objects &&
183-
is_promisor_object(&obj->oid))
183+
is_promisor_object(revs->repo, &obj->oid))
184184
return;
185185

186186
if (!revs->do_not_die_on_missing_objects)

object-store-ll.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ typedef int each_packed_object_fn(const struct object_id *oid,
550550
int for_each_object_in_pack(struct packed_git *p,
551551
each_packed_object_fn, void *data,
552552
enum for_each_object_flags flags);
553-
int for_each_packed_object(each_packed_object_fn, void *,
554-
enum for_each_object_flags flags);
553+
int for_each_packed_object(struct repository *repo, each_packed_object_fn cb,
554+
void *data, enum for_each_object_flags flags);
555555

556556
#endif /* OBJECT_STORE_LL_H */

packfile.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -2200,15 +2200,15 @@ int for_each_object_in_pack(struct packed_git *p,
22002200
return r;
22012201
}
22022202

2203-
int for_each_packed_object(each_packed_object_fn cb, void *data,
2204-
enum for_each_object_flags flags)
2203+
int for_each_packed_object(struct repository *repo, each_packed_object_fn cb,
2204+
void *data, enum for_each_object_flags flags)
22052205
{
22062206
struct packed_git *p;
22072207
int r = 0;
22082208
int pack_errors = 0;
22092209

2210-
prepare_packed_git(the_repository);
2211-
for (p = get_all_packs(the_repository); p; p = p->next) {
2210+
prepare_packed_git(repo);
2211+
for (p = get_all_packs(repo); p; p = p->next) {
22122212
if ((flags & FOR_EACH_OBJECT_LOCAL_ONLY) && !p->pack_local)
22132213
continue;
22142214
if ((flags & FOR_EACH_OBJECT_PROMISOR_ONLY) &&
@@ -2286,14 +2286,14 @@ static int add_promisor_object(const struct object_id *oid,
22862286
return 0;
22872287
}
22882288

2289-
int is_promisor_object(const struct object_id *oid)
2289+
int is_promisor_object(struct repository *r, const struct object_id *oid)
22902290
{
22912291
static struct oidset promisor_objects;
22922292
static int promisor_objects_prepared;
22932293

22942294
if (!promisor_objects_prepared) {
2295-
if (repo_has_promisor_remote(the_repository)) {
2296-
for_each_packed_object(add_promisor_object,
2295+
if (repo_has_promisor_remote(r)) {
2296+
for_each_packed_object(r, add_promisor_object,
22972297
&promisor_objects,
22982298
FOR_EACH_OBJECT_PROMISOR_ONLY |
22992299
FOR_EACH_OBJECT_PACK_ORDER);

packfile.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ int has_object_kept_pack(struct repository *r, const struct object_id *oid,
201201
* Return 1 if an object in a promisor packfile is or refers to the given
202202
* object, 0 otherwise.
203203
*/
204-
int is_promisor_object(const struct object_id *oid);
204+
int is_promisor_object(struct repository *r, const struct object_id *oid);
205205

206206
/*
207207
* Expose a function for fuzz testing.

promisor-remote.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ void promisor_remote_get_direct(struct repository *repo,
283283
}
284284

285285
for (i = 0; i < remaining_nr; i++) {
286-
if (is_promisor_object(&remaining_oids[i]))
286+
if (is_promisor_object(repo, &remaining_oids[i]))
287287
die(_("could not fetch %s from promisor remote"),
288288
oid_to_hex(&remaining_oids[i]));
289289
}

reachable.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ int add_unseen_recent_objects_to_traversal(struct rev_info *revs,
324324
if (ignore_in_core_kept_packs)
325325
flags |= FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS;
326326

327-
r = for_each_packed_object(add_recent_packed, &data, flags);
327+
r = for_each_packed_object(revs->repo, add_recent_packed, &data, flags);
328328

329329
done:
330330
oidset_clear(&data.extra_recent_oids);

revision.c

+5-4
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,8 @@ static struct object *get_reference(struct rev_info *revs, const char *name,
390390
if (!object) {
391391
if (revs->ignore_missing)
392392
return NULL;
393-
if (revs->exclude_promisor_objects && is_promisor_object(oid))
393+
if (revs->exclude_promisor_objects &&
394+
is_promisor_object(revs->repo, oid))
394395
return NULL;
395396
if (revs->do_not_die_on_missing_objects) {
396397
oidset_insert(&revs->missing_commits, oid);
@@ -432,7 +433,7 @@ static struct commit *handle_commit(struct rev_info *revs,
432433
if (revs->ignore_missing_links || (flags & UNINTERESTING))
433434
return NULL;
434435
if (revs->exclude_promisor_objects &&
435-
is_promisor_object(&tag->tagged->oid))
436+
is_promisor_object(revs->repo, &tag->tagged->oid))
436437
return NULL;
437438
if (revs->do_not_die_on_missing_objects && oid) {
438439
oidset_insert(&revs->missing_commits, oid);
@@ -1211,7 +1212,7 @@ static int process_parents(struct rev_info *revs, struct commit *commit,
12111212
revs->do_not_die_on_missing_objects;
12121213
if (repo_parse_commit_gently(revs->repo, p, gently) < 0) {
12131214
if (revs->exclude_promisor_objects &&
1214-
is_promisor_object(&p->object.oid)) {
1215+
is_promisor_object(revs->repo, &p->object.oid)) {
12151216
if (revs->first_parent_only)
12161217
break;
12171218
continue;
@@ -3915,7 +3916,7 @@ int prepare_revision_walk(struct rev_info *revs)
39153916
revs->treesame.name = "treesame";
39163917

39173918
if (revs->exclude_promisor_objects) {
3918-
for_each_packed_object(mark_uninteresting, revs,
3919+
for_each_packed_object(revs->repo, mark_uninteresting, revs,
39193920
FOR_EACH_OBJECT_PROMISOR_ONLY);
39203921
}
39213922

tag.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ struct object *deref_tag(struct repository *r, struct object *o, const char *war
8484
o = NULL;
8585
}
8686
if (!o && warn) {
87-
if (last_oid && is_promisor_object(last_oid))
87+
if (last_oid && is_promisor_object(r, last_oid))
8888
return NULL;
8989
if (!warnlen)
9090
warnlen = strlen(warn);

0 commit comments

Comments
 (0)