mirror of
https://github.com/git/git.git
synced 2024-12-19 14:54:07 +08:00
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;
|
||||
int res;
|
||||
|
||||
if (!core_apply_sparse_checkout)
|
||||
die(_("this worktree is not sparse"));
|
||||
|
||||
argc = parse_options(argc, argv, NULL,
|
||||
builtin_sparse_checkout_list_options,
|
||||
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(),
|
||||
};
|
||||
|
||||
if (!core_apply_sparse_checkout)
|
||||
die(_("no sparse-checkout to add to"));
|
||||
|
||||
repo_read_index(the_repository);
|
||||
|
||||
argc = parse_options(argc, argv, prefix,
|
||||
@ -719,6 +725,9 @@ static int sparse_checkout_reapply(int argc, const char **argv)
|
||||
OPT_END(),
|
||||
};
|
||||
|
||||
if (!core_apply_sparse_checkout)
|
||||
die(_("must be in a sparse-checkout to reapply sparsity patterns"));
|
||||
|
||||
argc = parse_options(argc, argv, NULL,
|
||||
builtin_sparse_checkout_reapply_options,
|
||||
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 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,
|
||||
builtin_sparse_checkout_disable_options,
|
||||
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 &&
|
||||
test_must_be_empty list &&
|
||||
test_i18ngrep "this worktree is not sparse (sparse-checkout file may not exist)" err
|
||||
|
Loading…
Reference in New Issue
Block a user