packfile: refactor `prepare_packed_git_one()` to work on sources
In the preceding commit we refactored how we load multi-pack indices to take a corresponding "source" as input. As part of this refactoring we started to store a pointer to the MIDX in `struct odb_source` itself. Refactor loading of packfiles in the same way: instead of passing in the object directory, we now pass in the source from which we want to load packfiles. This allows us to simplify the code because we don't have to search for a corresponding MIDX anymore, but we can instead directly use the MIDX that we have already prepared beforehand. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Patrick Steinhardt committed
Jul 15, 2025 at 13:29 UTC
ec4380f446b76e931002481f3e4be520c77058b6
1 file changed
+9
-14
packfile.c
+9
-14
@@ -935,22 +935,17 @@ static void prepare_pack(const char *full_name, size_t full_name_len,
935
report_garbage(PACKDIR_FILE_GARBAGE, full_name);
936
}
937
938
-static void prepare_packed_git_one(struct repository *r, char *objdir, int local)
938
+static void prepare_packed_git_one(struct odb_source *source, int local)
939
{
940
- struct prepare_pack_data data;
940
struct string_list garbage = STRING_LIST_INIT_DUP;
941
+ struct prepare_pack_data data = {
942
+ .m = source->midx,
943
+ .r = source->odb->repo,
944
+ .garbage = &garbage,
945
+ .local = local,
946
+ };
947
943
- data.m = r->objects->multi_pack_index;
944
-
945
- /* look for the multi-pack-index for this object directory */
946
- while (data.m && strcmp(data.m->object_dir, objdir))
947
- data.m = data.m->next;
948
-
949
- data.r = r;
950
- data.garbage = &garbage;
951
- data.local = local;
952
-
953
- for_each_file_in_pack_dir(objdir, prepare_pack, &data);
948
+ for_each_file_in_pack_dir(source->path, prepare_pack, &data);
949
950
report_pack_garbage(data.garbage);
951
string_list_clear(data.garbage, 0);
@@ -1040,7 +1035,7 @@ static void prepare_packed_git(struct repository *r)
1035
for (source = r->objects->sources; source; source = source->next) {
1036
int local = (source == r->objects->sources);
1037
prepare_multi_pack_index_one(source, local);
1043
- prepare_packed_git_one(r, source->path, local);
1038
+ prepare_packed_git_one(source, local);
1039
}
1040
rearrange_packed_git(r);
1041