]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sparse-checkout: correct reapply's handling of options
authorElijah Newren <newren@gmail.com>
Sat, 19 Feb 2022 16:44:41 +0000 (16:44 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 20 Feb 2022 08:01:15 +0000 (00:01 -0800)
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>
builtin/sparse-checkout.c
t/t1091-sparse-checkout-builtin.sh

index a311483a7d268d52bdfe10a7628a64ed5e6025d2..fcd574f5fc1ed204836b41209b0f3a217ee1c716 100644 (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;
 
index 3592d1244243e060fbdeb1916108f1dca0bf1d12..ce5e7c19efa63407678d8bcc8a3c7471a815fd21 100755 (executable)
@@ -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 &&