builtin/gc.c has two ways of checking if multi-pack-index is enabled: - git_config_get_bool() in incremental_repack_auto_condition() - the_repository->settings.core_multi_pack_index in maintenance_task_incremental_repack() The two implementations have existed since the incremental-repack task was introduced in e841a79a13 (maintenance: add incremental-repack auto condition, 2020-09-25). These two values can diverge because prepare_repo_settings() enables the feature in the_repository->settings by default. In the case where core.multiPackIndex is not set in the config, the auto condition would fail, causing the incremental-repack task to not be run. Because we always want to consider the default values, we should just always just use the_repository->settings. Standardize on using the_repository->settings.core_multi_pack_index to check if multi-pack-index is enabled. Signed-off-by: Glen Choo <chooglen@xxxxxxxxxx> --- builtin/gc.c | 5 +-- t/t7900-maintenance.sh | 88 ++++++++++++++++++++++++++++++------------ 2 files changed, 65 insertions(+), 28 deletions(-) diff --git a/builtin/gc.c b/builtin/gc.c index f05d2f0a1a..070b7dccb1 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -1051,12 +1051,11 @@ static int maintenance_task_loose_objects(struct maintenance_run_opts *opts) static int incremental_repack_auto_condition(void) { struct packed_git *p; - int enabled; int incremental_repack_auto_limit = 10; int count = 0; - if (git_config_get_bool("core.multiPackIndex", &enabled) || - !enabled) + prepare_repo_settings(the_repository); + if (!the_repository->settings.core_multi_pack_index) return 0; git_config_get_int("maintenance.incremental-repack.auto", diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh index 58f46c77e6..2c77ddded1 100755 --- a/t/t7900-maintenance.sh +++ b/t/t7900-maintenance.sh @@ -322,31 +322,69 @@ test_expect_success EXPENSIVE 'incremental-repack 2g limit' ' ' test_expect_success 'maintenance.incremental-repack.auto' ' - git repack -adk && - git config core.multiPackIndex true && - git multi-pack-index write && - GIT_TRACE2_EVENT="$(pwd)/midx-init.txt" git \ - -c maintenance.incremental-repack.auto=1 \ - maintenance run --auto --task=incremental-repack 2>/dev/null && - test_subcommand ! git multi-pack-index write --no-progress <midx-init.txt && - test_commit A && - git pack-objects --revs .git/objects/pack/pack <<-\EOF && - HEAD - ^HEAD~1 - EOF - GIT_TRACE2_EVENT=$(pwd)/trace-A git \ - -c maintenance.incremental-repack.auto=2 \ - maintenance run --auto --task=incremental-repack 2>/dev/null && - test_subcommand ! git multi-pack-index write --no-progress <trace-A && - test_commit B && - git pack-objects --revs .git/objects/pack/pack <<-\EOF && - HEAD - ^HEAD~1 - EOF - GIT_TRACE2_EVENT=$(pwd)/trace-B git \ - -c maintenance.incremental-repack.auto=2 \ - maintenance run --auto --task=incremental-repack 2>/dev/null && - test_subcommand git multi-pack-index write --no-progress <trace-B + ( + git init incremental-repack-true && + cd incremental-repack-true && + git config core.multiPackIndex true && + test_commit A && + git repack -adk && + git multi-pack-index write && + GIT_TRACE2_EVENT="$(pwd)/midx-init.txt" git \ + -c maintenance.incremental-repack.auto=1 \ + maintenance run --auto --task=incremental-repack 2>/dev/null && + test_subcommand ! git multi-pack-index write --no-progress <midx-init.txt && + test_commit B && + git pack-objects --revs .git/objects/pack/pack <<-\EOF && + HEAD + ^HEAD~1 + EOF + GIT_TRACE2_EVENT=$(pwd)/trace-A git \ + -c maintenance.incremental-repack.auto=2 \ + maintenance run --auto --task=incremental-repack 2>/dev/null && + test_subcommand ! git multi-pack-index write --no-progress <trace-A && + test_commit C && + git pack-objects --revs .git/objects/pack/pack <<-\EOF && + HEAD + ^HEAD~1 + EOF + GIT_TRACE2_EVENT=$(pwd)/trace-B git \ + -c maintenance.incremental-repack.auto=2 \ + maintenance run --auto --task=incremental-repack 2>/dev/null && + test_subcommand git multi-pack-index write --no-progress <trace-B + ) +' + +test_expect_success 'maintenance.incremental-repack.auto (when config is unset)' ' + ( + git init incremental-repack-unset && + cd incremental-repack-unset && + test_unconfig core.multiPackIndex && + test_commit A && + git repack -adk && + git multi-pack-index write && + GIT_TRACE2_EVENT="$(pwd)/midx-init.txt" git \ + -c maintenance.incremental-repack.auto=1 \ + maintenance run --auto --task=incremental-repack 2>/dev/null && + test_subcommand ! git multi-pack-index write --no-progress <midx-init.txt && + test_commit B && + git pack-objects --revs .git/objects/pack/pack <<-\EOF && + HEAD + ^HEAD~1 + EOF + GIT_TRACE2_EVENT=$(pwd)/trace-A git \ + -c maintenance.incremental-repack.auto=2 \ + maintenance run --auto --task=incremental-repack 2>/dev/null && + test_subcommand ! git multi-pack-index write --no-progress <trace-A && + test_commit C && + git pack-objects --revs .git/objects/pack/pack <<-\EOF && + HEAD + ^HEAD~1 + EOF + GIT_TRACE2_EVENT=$(pwd)/trace-B git \ + -c maintenance.incremental-repack.auto=2 \ + maintenance run --auto --task=incremental-repack 2>/dev/null && + test_subcommand git multi-pack-index write --no-progress <trace-B + ) ' test_expect_success 'pack-refs task' ' -- 2.33.0.464.g1972c5931b-goog