gc: perform incremental repack when implictly enabled

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 always 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@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Glen Choo committed Oct 15, 2021 at 13:16 UTC a897ab7ed143b2790f05785a3b1916f8a71c7a8c
2 files changed +26 -7
builtin/gc.c
+2 -3
@@ -1049,12 +1049,11 @@ static int maintenance_task_loose_objects(struct maintenance_run_opts *opts)
1049 static int incremental_repack_auto_condition(void)
1050 {
1051 struct packed_git *p;
1052 - int enabled;
1052 int incremental_repack_auto_limit = 10;
1053 int count = 0;
1054
1056 - if (git_config_get_bool("core.multiPackIndex", &enabled) ||
1057 - !enabled)
1055 + prepare_repo_settings(the_repository);
1056 + if (!the_repository->settings.core_multi_pack_index)
1057 return 0;
1058
1059 git_config_get_int("maintenance.incremental-repack.auto",
t/t7900-maintenance.sh
+24 -4
@@ -336,15 +336,15 @@ test_expect_success EXPENSIVE 'incremental-repack 2g limit' '
336 --no-progress --batch-size=2147483647 <run-2g.txt
337 '
338
339 -test_expect_success 'maintenance.incremental-repack.auto' '
339 +run_incremental_repack_and_verify () {
340 + test_commit A &&
341 git repack -adk &&
341 - git config core.multiPackIndex true &&
342 git multi-pack-index write &&
343 GIT_TRACE2_EVENT="$(pwd)/midx-init.txt" git \
344 -c maintenance.incremental-repack.auto=1 \
345 maintenance run --auto --task=incremental-repack 2>/dev/null &&
346 test_subcommand ! git multi-pack-index write --no-progress <midx-init.txt &&
347 - test_commit A &&
347 + test_commit B &&
348 git pack-objects --revs .git/objects/pack/pack <<-\EOF &&
349 HEAD
350 ^HEAD~1
@@ -353,7 +353,7 @@ test_expect_success 'maintenance.incremental-repack.auto' '
353 -c maintenance.incremental-repack.auto=2 \
354 maintenance run --auto --task=incremental-repack 2>/dev/null &&
355 test_subcommand ! git multi-pack-index write --no-progress <trace-A &&
356 - test_commit B &&
356 + test_commit C &&
357 git pack-objects --revs .git/objects/pack/pack <<-\EOF &&
358 HEAD
359 ^HEAD~1
@@ -362,6 +362,26 @@ test_expect_success 'maintenance.incremental-repack.auto' '
362 -c maintenance.incremental-repack.auto=2 \
363 maintenance run --auto --task=incremental-repack 2>/dev/null &&
364 test_subcommand git multi-pack-index write --no-progress <trace-B
365 +}
366 +
367 +test_expect_success 'maintenance.incremental-repack.auto' '
368 + rm -rf incremental-repack-true &&
369 + git init incremental-repack-true &&
370 + (
371 + cd incremental-repack-true &&
372 + git config core.multiPackIndex true &&
373 + run_incremental_repack_and_verify
374 + )
375 +'
376 +
377 +test_expect_success 'maintenance.incremental-repack.auto (when config is unset)' '
378 + rm -rf incremental-repack-unset &&
379 + git init incremental-repack-unset &&
380 + (
381 + cd incremental-repack-unset &&
382 + test_unconfig core.multiPackIndex &&
383 + run_incremental_repack_and_verify
384 + )
385 '
386
387 test_expect_success 'pack-refs task' '