]> git.ipfire.org Git - thirdparty/git.git/commitdiff
repack: track the ODB source via existing_packs
authorTaylor Blau <me@ttaylorr.com>
Tue, 19 May 2026 15:57:57 +0000 (11:57 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 May 2026 02:31:13 +0000 (11:31 +0900)
Store the ODB source in the `existing_packs` struct and use that in
place of the raw `repo->objects->sources` access within `cmd_repack()`.

The source used is still assigned from the first source in the list, so
there are no functional changes in this commit. The changes instead
serve two purposes (one immediate, one not):

 - The incremental MIDX-based repacking machinery will need to know what
   source is being used to read the existing MIDX/chain (should one
   exist).

 - In the future, if "git repack" is taught how to operate on other
   object sources, this field will serve as the authoritative value for
   that source.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/repack.c
repack.c
repack.h

index 4c5a82c2c8d7dec20a23b5f7d9350fa0c80e1ab6..24be147d39a1ed741d726f130e15d51114333639 100644 (file)
@@ -417,7 +417,7 @@ int cmd_repack(int argc,
                 * midx_has_unknown_packs() will make the decision for
                 * us.
                 */
-               if (!get_multi_pack_index(repo->objects->sources))
+               if (!get_multi_pack_index(existing.source))
                        midx_must_contain_cruft = 1;
        }
 
@@ -564,8 +564,7 @@ int cmd_repack(int argc,
                unsigned flags = 0;
                if (git_env_bool(GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL, 0))
                        flags |= MIDX_WRITE_INCREMENTAL;
-               write_midx_file(repo->objects->sources,
-                               NULL, NULL, flags);
+               write_midx_file(existing.source, NULL, NULL, flags);
        }
 
 cleanup:
index 596841027af93f08ef5b222648bcc5bb30eb03c3..2ee6b51420aa5487e90b2db8ac0d215dfcfd0663 100644 (file)
--- a/repack.c
+++ b/repack.c
@@ -154,6 +154,8 @@ void existing_packs_collect(struct existing_packs *existing,
                        string_list_append(&existing->non_kept_packs, buf.buf);
        }
 
+       existing->source = existing->repo->objects->sources;
+
        string_list_sort(&existing->kept_packs);
        string_list_sort(&existing->non_kept_packs);
        string_list_sort(&existing->cruft_packs);
index bc9f2e1a5de984028a7fcf1fa30873ab436eecde..c0e9f0ca647c507fa74fa8544e616dd9ba351e96 100644 (file)
--- a/repack.h
+++ b/repack.h
@@ -56,6 +56,7 @@ struct packed_git;
 
 struct existing_packs {
        struct repository *repo;
+       struct odb_source *source;
        struct string_list kept_packs;
        struct string_list non_kept_packs;
        struct string_list cruft_packs;