delta-islands: stop depending on `the_repository`

There are multiple sites in "delta-islands.c" where we use the global `the_repository` variable, either explicitly or implicitly by using `the_hash_algo`. Refactor the code to stop using `the_repository`. In most cases this is trivial because we already had a repository available in the calling context, with the only exception being `propagate_island_marks()`. Adapt it so that the repository gets passed in via a parameter. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Mar 10, 2025 at 08:13 UTC 19be71db9c3faafc113c16b4ca9fc30281baf1ce
3 files changed +8 -10
builtin/pack-objects.c
+1 -1
@@ -3847,7 +3847,7 @@ static void show_commit(struct commit *commit, void *data UNUSED)
3847 index_commit_for_bitmap(commit);
3848
3849 if (use_delta_islands)
3850 - propagate_island_marks(commit);
3850 + propagate_island_marks(the_repository, commit);
3851 }
3852
3853 static void show_object(struct object *obj, const char *name,
delta-islands.c
+6 -8
@@ -1,4 +1,3 @@
1 -#define USE_THE_REPOSITORY_VARIABLE
1 #define DISABLE_SIGN_COMPARE_WARNINGS
2
3 #include "git-compat-util.h"
@@ -267,8 +266,7 @@ void resolve_tree_islands(struct repository *r,
266 QSORT(todo, nr, tree_depth_compare);
267
268 if (progress)
270 - progress_state = start_progress(the_repository,
271 - _("Propagating island marks"), nr);
269 + progress_state = start_progress(r, _("Propagating island marks"), nr);
270
271 for (i = 0; i < nr; i++) {
272 struct object_entry *ent = todo[i].entry;
@@ -490,9 +488,9 @@ void load_delta_islands(struct repository *r, int progress)
488
489 island_marks = kh_init_oid_map();
490
493 - git_config(island_config_callback, &ild);
491 + repo_config(r, island_config_callback, &ild);
492 ild.remote_islands = kh_init_str();
495 - refs_for_each_ref(get_main_ref_store(the_repository),
493 + refs_for_each_ref(get_main_ref_store(r),
494 find_island_for_ref, &ild);
495 free_config_regexes(&ild);
496 deduplicate_islands(ild.remote_islands, r);
@@ -502,7 +500,7 @@ void load_delta_islands(struct repository *r, int progress)
500 fprintf(stderr, _("Marked %d islands, done.\n"), island_counter);
501 }
502
505 -void propagate_island_marks(struct commit *commit)
503 +void propagate_island_marks(struct repository *r, struct commit *commit)
504 {
505 khiter_t pos = kh_get_oid_map(island_marks, commit->object.oid);
506
@@ -510,8 +508,8 @@ void propagate_island_marks(struct commit *commit)
508 struct commit_list *p;
509 struct island_bitmap *root_marks = kh_value(island_marks, pos);
510
513 - repo_parse_commit(the_repository, commit);
514 - set_island_marks(&repo_get_commit_tree(the_repository, commit)->object,
511 + repo_parse_commit(r, commit);
512 + set_island_marks(&repo_get_commit_tree(r, commit)->object,
513 root_marks);
514 for (p = commit->parents; p; p = p->next)
515 set_island_marks(&p->item->object, root_marks);
delta-islands.h
+1 -1
@@ -12,7 +12,7 @@ void resolve_tree_islands(struct repository *r,
12 int progress,
13 struct packing_data *to_pack);
14 void load_delta_islands(struct repository *r, int progress);
15 -void propagate_island_marks(struct commit *commit);
15 +void propagate_island_marks(struct repository *r, struct commit *commit);
16 int compute_pack_layers(struct packing_data *to_pack);
17 void free_island_marks(void);
18