]> git.ipfire.org Git - thirdparty/git.git/commitdiff
packfile: refactor `prepare_packed_git()` to work on packfile store
authorPatrick Steinhardt <ps@pks.im>
Tue, 23 Sep 2025 10:17:07 +0000 (12:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Sep 2025 18:53:50 +0000 (11:53 -0700)
The `prepare_packed_git()` function and its friends are responsible for
loading packfiles as well as the multi-pack index for a given object
database. Refactor these functions to accept a packfile store instead of
a repository to clarify their scope.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
packfile.c

index 5588a7ad6dfde78b1fdecd5ce824dc3c03a7a0b1..095c85919b6c7c2ef17da08ddf6524b630cf7c9d 100644 (file)
@@ -974,37 +974,32 @@ static int sort_pack(const struct packed_git *a, const struct packed_git *b)
        return -1;
 }
 
-static void rearrange_packed_git(struct repository *r)
-{
-       sort_packs(&r->objects->packfiles->packs, sort_pack);
-}
-
-static void prepare_packed_git_mru(struct repository *r)
+static void packfile_store_prepare_mru(struct packfile_store *store)
 {
        struct packed_git *p;
 
-       INIT_LIST_HEAD(&r->objects->packfiles->mru);
+       INIT_LIST_HEAD(&store->mru);
 
-       for (p = r->objects->packfiles->packs; p; p = p->next)
-               list_add_tail(&p->mru, &r->objects->packfiles->mru);
+       for (p = store->packs; p; p = p->next)
+               list_add_tail(&p->mru, &store->mru);
 }
 
-static void prepare_packed_git(struct repository *r)
+static void packfile_store_prepare(struct packfile_store *store)
 {
        struct odb_source *source;
 
-       if (r->objects->packfiles->initialized)
+       if (store->initialized)
                return;
 
-       odb_prepare_alternates(r->objects);
-       for (source = r->objects->sources; source; source = source->next) {
+       odb_prepare_alternates(store->odb);
+       for (source = store->odb->sources; source; source = source->next) {
                prepare_multi_pack_index_one(source);
                prepare_packed_git_one(source);
        }
-       rearrange_packed_git(r);
+       sort_packs(&store->packs, sort_pack);
 
-       prepare_packed_git_mru(r);
-       r->objects->packfiles->initialized = true;
+       packfile_store_prepare_mru(store);
+       store->initialized = true;
 }
 
 void reprepare_packed_git(struct repository *r)
@@ -1027,25 +1022,25 @@ void reprepare_packed_git(struct repository *r)
 
        r->objects->approximate_object_count_valid = 0;
        r->objects->packfiles->initialized = false;
-       prepare_packed_git(r);
+       packfile_store_prepare(r->objects->packfiles);
        obj_read_unlock();
 }
 
 struct packed_git *get_packed_git(struct repository *r)
 {
-       prepare_packed_git(r);
+       packfile_store_prepare(r->objects->packfiles);
        return r->objects->packfiles->packs;
 }
 
 struct multi_pack_index *get_multi_pack_index(struct odb_source *source)
 {
-       prepare_packed_git(source->odb->repo);
+       packfile_store_prepare(source->odb->packfiles);
        return source->midx;
 }
 
 struct packed_git *get_all_packs(struct repository *r)
 {
-       prepare_packed_git(r);
+       packfile_store_prepare(r->objects->packfiles);
 
        for (struct odb_source *source = r->objects->sources; source; source = source->next) {
                struct multi_pack_index *m = source->midx;
@@ -1060,7 +1055,7 @@ struct packed_git *get_all_packs(struct repository *r)
 
 struct list_head *get_packed_git_mru(struct repository *r)
 {
-       prepare_packed_git(r);
+       packfile_store_prepare(r->objects->packfiles);
        return &r->objects->packfiles->mru;
 }
 
@@ -1078,7 +1073,7 @@ unsigned long repo_approximate_object_count(struct repository *r)
                unsigned long count = 0;
                struct packed_git *p;
 
-               prepare_packed_git(r);
+               packfile_store_prepare(r->objects->packfiles);
 
                for (source = r->objects->sources; source; source = source->next) {
                        struct multi_pack_index *m = get_multi_pack_index(source);
@@ -2068,7 +2063,7 @@ int find_pack_entry(struct repository *r, const struct object_id *oid, struct pa
 {
        struct list_head *pos;
 
-       prepare_packed_git(r);
+       packfile_store_prepare(r->objects->packfiles);
 
        for (struct odb_source *source = r->objects->sources; source; source = source->next)
                if (source->midx && fill_midx_entry(source->midx, oid, e))