sparse-checkout: correct reapply's handling of options

Commit 4e256731d6 ("sparse-checkout: enable reapply to take
--[no-]{cone,sparse-index}", 2021-12-14) made it so that reapply could
take additional options but added no tests.  Tests would have shown that
the feature doesn't work because the initial values are set AFTER
parsing the command line options instead of before.  Add a test and set
the initial value at the appropriate time.

Reviewed-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren 2022-02-19 16:44:41 +00:00 committed by Junio C Hamano
parent b80121027d
commit f748012e01
2 changed files with 31 additions and 3 deletions

View file

@ -789,15 +789,15 @@ static int sparse_checkout_reapply(int argc, const char **argv)
if (!core_apply_sparse_checkout)
die(_("must be in a sparse-checkout to reapply sparsity patterns"));
reapply_opts.cone_mode = -1;
reapply_opts.sparse_index = -1;
argc = parse_options(argc, argv, NULL,
builtin_sparse_checkout_reapply_options,
builtin_sparse_checkout_reapply_usage, 0);
repo_read_index(the_repository);
reapply_opts.cone_mode = -1;
reapply_opts.sparse_index = -1;
if (update_modes(&reapply_opts.cone_mode, &reapply_opts.sparse_index))
return 1;

View file

@ -495,6 +495,34 @@ test_expect_failure 'sparse-checkout reapply' '
git -C tweak sparse-checkout disable
'
test_expect_success 'reapply can handle config options' '
git -C repo sparse-checkout init --cone --no-sparse-index &&
git -C repo config --worktree --list >actual &&
cat >expect <<-\EOF &&
core.sparsecheckout=true
core.sparsecheckoutcone=true
EOF
test_cmp expect actual &&
git -C repo sparse-checkout reapply --no-cone --no-sparse-index &&
git -C repo config --worktree --list >actual &&
cat >expect <<-\EOF &&
core.sparsecheckout=true
EOF
test_cmp expect actual &&
git -C repo sparse-checkout reapply --cone --sparse-index &&
git -C repo config --worktree --list >actual &&
cat >expect <<-\EOF &&
core.sparsecheckout=true
core.sparsecheckoutcone=true
index.sparse=true
EOF
test_cmp expect actual &&
git -C repo sparse-checkout disable
'
test_expect_success 'cone mode: set with core.ignoreCase=true' '
rm repo/.git/info/sparse-checkout &&
git -C repo sparse-checkout init --cone &&