pack-bitmap-write: stop depending on `the_repository`
There are multiple sites in "pack-bitmap-write.c" where we use the global `the_repository` variable, either explicitly or implicitly by using `the_hash_algo`. Refactor the code so that the `struct bitmap_writer` stores the repository it is getting initialized with. Like this, we can adapt callsites that use `the_repository` to instead use the repository provided by the writer. Remove the `USE_THE_REPOSITORY_VARIABLE` define. 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
1a6768d1dd6d92b34f25507091ff0775371e19cb
2 files changed
+19
-18
pack-bitmap-write.c
+18
-18
@@ -1,4 +1,3 @@
1
-#define USE_THE_REPOSITORY_VARIABLE
1
#define DISABLE_SIGN_COMPARE_WARNINGS
2
3
#include "git-compat-util.h"
@@ -48,6 +47,7 @@ void bitmap_writer_init(struct bitmap_writer *writer, struct repository *r,
47
memset(writer, 0, sizeof(struct bitmap_writer));
48
if (writer->bitmaps)
49
BUG("bitmap writer already initialized");
50
+ writer->repo = r;
51
writer->bitmaps = kh_init_oid_map();
52
writer->pseudo_merge_commits = kh_init_oid_map();
53
writer->to_pack = pdata;
@@ -415,9 +415,9 @@ next:
415
bb->commits[bb->commits_nr++] = r->item;
416
}
417
418
- trace2_data_intmax("pack-bitmap-write", the_repository,
418
+ trace2_data_intmax("pack-bitmap-write", writer->repo,
419
"num_selected_commits", writer->selected_nr);
420
- trace2_data_intmax("pack-bitmap-write", the_repository,
420
+ trace2_data_intmax("pack-bitmap-write", writer->repo,
421
"num_maximal_commits", num_maximal);
422
423
release_revisions(&revs);
@@ -460,7 +460,7 @@ static int fill_bitmap_tree(struct bitmap_writer *writer,
460
switch (object_type(entry.mode)) {
461
case OBJ_TREE:
462
if (fill_bitmap_tree(writer, bitmap,
463
- lookup_tree(the_repository, &entry.oid)) < 0)
463
+ lookup_tree(writer->repo, &entry.oid)) < 0)
464
return -1;
465
break;
466
case OBJ_BLOB:
@@ -536,7 +536,7 @@ static int fill_bitmap_commit(struct bitmap_writer *writer,
536
return -1;
537
bitmap_set(ent->bitmap, pos);
538
prio_queue_put(tree_queue,
539
- repo_get_commit_tree(the_repository, c));
539
+ repo_get_commit_tree(writer->repo, c));
540
}
541
542
for (p = c->parents; p; p = p->next) {
@@ -590,11 +590,11 @@ int bitmap_writer_build(struct bitmap_writer *writer)
590
int closed = 1; /* until proven otherwise */
591
592
if (writer->show_progress)
593
- writer->progress = start_progress(the_repository,
593
+ writer->progress = start_progress(writer->repo,
594
"Building bitmaps",
595
writer->selected_nr);
596
trace2_region_enter("pack-bitmap-write", "building_bitmaps_total",
597
- the_repository);
597
+ writer->repo);
598
599
old_bitmap = prepare_bitmap_git(writer->to_pack->repo);
600
if (old_bitmap)
@@ -645,10 +645,10 @@ int bitmap_writer_build(struct bitmap_writer *writer)
645
free(mapping);
646
647
trace2_region_leave("pack-bitmap-write", "building_bitmaps_total",
648
- the_repository);
649
- trace2_data_intmax("pack-bitmap-write", the_repository,
648
+ writer->repo);
649
+ trace2_data_intmax("pack-bitmap-write", writer->repo,
650
"building_bitmaps_reused", reused_bitmaps_nr);
651
- trace2_data_intmax("pack-bitmap-write", the_repository,
651
+ trace2_data_intmax("pack-bitmap-write", writer->repo,
652
"building_bitmaps_pseudo_merge_reused",
653
reused_pseudo_merge_bitmaps_nr);
654
@@ -711,7 +711,7 @@ void bitmap_writer_select_commits(struct bitmap_writer *writer,
711
}
712
713
if (writer->show_progress)
714
- writer->progress = start_progress(the_repository,
714
+ writer->progress = start_progress(writer->repo,
715
"Selecting bitmap commits", 0);
716
717
for (;;) {
@@ -960,7 +960,7 @@ static void write_lookup_table(struct bitmap_writer *writer, struct hashfile *f,
960
for (i = 0; i < bitmap_writer_nr_selected_commits(writer); i++)
961
table_inv[table[i]] = i;
962
963
- trace2_region_enter("pack-bitmap-write", "writing_lookup_table", the_repository);
963
+ trace2_region_enter("pack-bitmap-write", "writing_lookup_table", writer->repo);
964
for (i = 0; i < bitmap_writer_nr_selected_commits(writer); i++) {
965
struct bitmapped_commit *selected = &writer->selected[table[i]];
966
uint32_t xor_offset = selected->xor_offset;
@@ -987,7 +987,7 @@ static void write_lookup_table(struct bitmap_writer *writer, struct hashfile *f,
987
hashwrite_be64(f, (uint64_t)offsets[table[i]]);
988
hashwrite_be32(f, xor_row);
989
}
990
- trace2_region_leave("pack-bitmap-write", "writing_lookup_table", the_repository);
990
+ trace2_region_leave("pack-bitmap-write", "writing_lookup_table", writer->repo);
991
992
free(table);
993
free(table_inv);
@@ -1008,7 +1008,7 @@ static void write_hash_cache(struct hashfile *f,
1008
void bitmap_writer_set_checksum(struct bitmap_writer *writer,
1009
const unsigned char *sha1)
1010
{
1011
- hashcpy(writer->pack_checksum, sha1, the_repository->hash_algo);
1011
+ hashcpy(writer->pack_checksum, sha1, writer->repo->hash_algo);
1012
}
1013
1014
void bitmap_writer_finish(struct bitmap_writer *writer,
@@ -1030,15 +1030,15 @@ void bitmap_writer_finish(struct bitmap_writer *writer,
1030
if (writer->pseudo_merges_nr)
1031
options |= BITMAP_OPT_PSEUDO_MERGES;
1032
1033
- f = hashfd(the_repository->hash_algo, fd, tmp_file.buf);
1033
+ f = hashfd(writer->repo->hash_algo, fd, tmp_file.buf);
1034
1035
memcpy(header.magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE));
1036
header.version = htons(default_version);
1037
header.options = htons(flags | options);
1038
header.entry_count = htonl(bitmap_writer_nr_selected_commits(writer));
1039
- hashcpy(header.checksum, writer->pack_checksum, the_repository->hash_algo);
1039
+ hashcpy(header.checksum, writer->pack_checksum, writer->repo->hash_algo);
1040
1041
- hashwrite(f, &header, sizeof(header) - GIT_MAX_RAWSZ + the_hash_algo->rawsz);
1041
+ hashwrite(f, &header, sizeof(header) - GIT_MAX_RAWSZ + writer->repo->hash_algo->rawsz);
1042
dump_bitmap(f, writer->commits);
1043
dump_bitmap(f, writer->trees);
1044
dump_bitmap(f, writer->blobs);
@@ -1072,7 +1072,7 @@ void bitmap_writer_finish(struct bitmap_writer *writer,
1072
finalize_hashfile(f, NULL, FSYNC_COMPONENT_PACK_METADATA,
1073
CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
1074
1075
- if (adjust_shared_perm(the_repository, tmp_file.buf))
1075
+ if (adjust_shared_perm(writer->repo, tmp_file.buf))
1076
die_errno("unable to make temporary bitmap file readable");
1077
1078
if (rename(tmp_file.buf, filename))
pack-bitmap.h
+1
@@ -104,6 +104,7 @@ int bitmap_has_oid_in_uninteresting(struct bitmap_index *, const struct object_i
104
off_t get_disk_usage_from_bitmap(struct bitmap_index *, struct rev_info *);
105
106
struct bitmap_writer {
107
+ struct repository *repo;
108
struct ewah_bitmap *commits;
109
struct ewah_bitmap *trees;
110
struct ewah_bitmap *blobs;