sparse-checkout: add sanity-checks on initial sparsity state
Most sparse-checkout subcommands (list, add, reapply) only make sense when already in a sparse state. Add a quick check that will error out early if this is not the case. Also document with a comment why we do not exit early in `disable` even when core.sparseCheckout starts as false. Reviewed-by: Derrick Stolee <dstolee@microsoft.com> Reviewed-by: Victoria Dye <vdye@github.com> Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0b624e039c
commit
45c5e47048
@ -56,6 +56,9 @@ static int sparse_checkout_list(int argc, const char **argv)
|
|||||||
char *sparse_filename;
|
char *sparse_filename;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
if (!core_apply_sparse_checkout)
|
||||||
|
die(_("this worktree is not sparse"));
|
||||||
|
|
||||||
argc = parse_options(argc, argv, NULL,
|
argc = parse_options(argc, argv, NULL,
|
||||||
builtin_sparse_checkout_list_options,
|
builtin_sparse_checkout_list_options,
|
||||||
builtin_sparse_checkout_list_usage, 0);
|
builtin_sparse_checkout_list_usage, 0);
|
||||||
@ -671,6 +674,9 @@ static int sparse_checkout_add(int argc, const char **argv, const char *prefix)
|
|||||||
OPT_END(),
|
OPT_END(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!core_apply_sparse_checkout)
|
||||||
|
die(_("no sparse-checkout to add to"));
|
||||||
|
|
||||||
repo_read_index(the_repository);
|
repo_read_index(the_repository);
|
||||||
|
|
||||||
argc = parse_options(argc, argv, prefix,
|
argc = parse_options(argc, argv, prefix,
|
||||||
@ -719,6 +725,9 @@ static int sparse_checkout_reapply(int argc, const char **argv)
|
|||||||
OPT_END(),
|
OPT_END(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (!core_apply_sparse_checkout)
|
||||||
|
die(_("must be in a sparse-checkout to reapply sparsity patterns"));
|
||||||
|
|
||||||
argc = parse_options(argc, argv, NULL,
|
argc = parse_options(argc, argv, NULL,
|
||||||
builtin_sparse_checkout_reapply_options,
|
builtin_sparse_checkout_reapply_options,
|
||||||
builtin_sparse_checkout_reapply_usage, 0);
|
builtin_sparse_checkout_reapply_usage, 0);
|
||||||
@ -740,6 +749,17 @@ static int sparse_checkout_disable(int argc, const char **argv)
|
|||||||
struct pattern_list pl;
|
struct pattern_list pl;
|
||||||
struct strbuf match_all = STRBUF_INIT;
|
struct strbuf match_all = STRBUF_INIT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We do not exit early if !core_apply_sparse_checkout; due to the
|
||||||
|
* ability for users to manually muck things up between
|
||||||
|
* direct editing of .git/info/sparse-checkout
|
||||||
|
* running read-tree -m u HEAD or update-index --skip-worktree
|
||||||
|
* direct toggling of config options
|
||||||
|
* users might end up with an index with SKIP_WORKTREE bit set on
|
||||||
|
* some files and not know how to undo it. So, here we just
|
||||||
|
* forcibly return to a dense checkout regardless of initial state.
|
||||||
|
*/
|
||||||
|
|
||||||
argc = parse_options(argc, argv, NULL,
|
argc = parse_options(argc, argv, NULL,
|
||||||
builtin_sparse_checkout_disable_options,
|
builtin_sparse_checkout_disable_options,
|
||||||
builtin_sparse_checkout_disable_usage, 0);
|
builtin_sparse_checkout_disable_usage, 0);
|
||||||
|
@ -41,7 +41,15 @@ test_expect_success 'setup' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git sparse-checkout list (empty)' '
|
test_expect_success 'git sparse-checkout list (not sparse)' '
|
||||||
|
test_must_fail git -C repo sparse-checkout list >list 2>err &&
|
||||||
|
test_must_be_empty list &&
|
||||||
|
test_i18ngrep "this worktree is not sparse" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git sparse-checkout list (not sparse)' '
|
||||||
|
git -C repo sparse-checkout set &&
|
||||||
|
rm repo/.git/info/sparse-checkout &&
|
||||||
git -C repo sparse-checkout list >list 2>err &&
|
git -C repo sparse-checkout list >list 2>err &&
|
||||||
test_must_be_empty list &&
|
test_must_be_empty list &&
|
||||||
test_i18ngrep "this worktree is not sparse (sparse-checkout file may not exist)" err
|
test_i18ngrep "this worktree is not sparse (sparse-checkout file may not exist)" err
|
||||||
|
Loading…
Reference in New Issue
Block a user