Re: [PATCH 17/20] sparse-checkout: disable sparse-index
- From
SZEDER Gábor <szeder.dev@gmail.com>
- Date
- Feb 27, 2021, 12:32 UTC
- Message-ID
- <20210227123253.GC3590451@szeder.dev>
- In-Reply-To
- <bcf960ef2362e32e2f8d7e06a31a925936f62bc1.1614111270.git.gitgitgadget@gmail.com>
On Tue, Feb 23, 2021 at 08:14:26PM +0000, Derrick Stolee via GitGitGadget wrote:
Show 88 quoted lines
> From: Derrick Stolee <dstolee@microsoft.com>
>
> We use 'git sparse-checkout init --cone --sparse-index' to toggle the
> sparse-index feature. It makes sense to also disable it when running
> 'git sparse-checkout disable'. This is particularly important because it
> removes the extensions.sparseIndex config option, allowing other tools
> to use this Git repository again.
>
> This does mean that 'git sparse-checkout init' will not re-enable the
> sparse-index feature, even if it was previously enabled.
>
> While testing this feature, I noticed that the sparse-index was not
> being written on the first run, but by a second. This was caught by the
> call to 'test-tool read-cache --table'. This requires adjusting some
> assignments to core_apply_sparse_checkout and pl.use_cone_patterns in
> the sparse_checkout_init() logic.
>
> Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
> ---
> builtin/sparse-checkout.c | 10 +++++++++-
> t/t1091-sparse-checkout-builtin.sh | 13 +++++++++++++
> 2 files changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
> index ca63e2c64e95..585343fa1972 100644
> --- a/builtin/sparse-checkout.c
> +++ b/builtin/sparse-checkout.c
> @@ -280,6 +280,9 @@ static int set_config(enum sparse_checkout_mode mode)
> "core.sparseCheckoutCone",
> mode == MODE_CONE_PATTERNS ? "true" : NULL);
>
> + if (mode == MODE_NO_PATTERNS)
> + set_sparse_index_config(the_repository, 0);
> +
> return 0;
> }
>
> @@ -341,10 +344,11 @@ static int sparse_checkout_init(int argc, const char **argv)
> the_repository->index->updated_workdir = 1;
> }
>
> + core_apply_sparse_checkout = 1;
> +
> /* If we already have a sparse-checkout file, use it. */
> if (res >= 0) {
> free(sparse_filename);
> - core_apply_sparse_checkout = 1;
> return update_working_directory(NULL);
> }
>
> @@ -366,6 +370,7 @@ static int sparse_checkout_init(int argc, const char **argv)
> add_pattern(strbuf_detach(&pattern, NULL), empty_base, 0, &pl, 0);
> strbuf_addstr(&pattern, "!/*/");
> add_pattern(strbuf_detach(&pattern, NULL), empty_base, 0, &pl, 0);
> + pl.use_cone_patterns = init_opts.cone_mode;
>
> return write_patterns_and_update(&pl);
> }
> @@ -632,6 +637,9 @@ static int sparse_checkout_disable(int argc, const char **argv)
> strbuf_addstr(&match_all, "/*");
> add_pattern(strbuf_detach(&match_all, NULL), empty_base, 0, &pl, 0);
>
> + prepare_repo_settings(the_repository);
> + the_repository->settings.sparse_index = 0;
> +
> if (update_working_directory(&pl))
> die(_("error while refreshing working directory"));
>
> diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
> index fc64e9ed99f4..ff1ad570a255 100755
> --- a/t/t1091-sparse-checkout-builtin.sh
> +++ b/t/t1091-sparse-checkout-builtin.sh
> @@ -205,6 +205,19 @@ test_expect_success 'sparse-checkout disable' '
> check_files repo a deep folder1 folder2
> '
>
> +test_expect_success 'sparse-index enabled and disabled' '
> + git -C repo sparse-checkout init --cone --sparse-index &&
> + test_cmp_config -C repo true extensions.sparseIndex &&
> + test-tool -C repo read-cache --table >cache &&
> + grep " tree " cache &&
> +
> + git -C repo sparse-checkout disable &&
> + test-tool -C repo read-cache --table >cache &&
> + ! grep " tree " cache &&
> + git -C repo config --list >config &&
> + ! grep extensions.sparseindex config
> +'This test passes with GIT_TEST_SPLIT_INDEX=1 at the moment, because, unfortunately, GIT_TEST_SPLIT_INDEX has been broken for the past two years. However, if I run it with my WIP fixes for that issue [1], then it will fail:
+git -C repo sparse-checkout init --cone --sparse-index +test_cmp_config -C repo true extensions.sparseIndex +test-tool -C repo read-cache --table +grep tree cache error: last command exited with $?=1 not ok 16 - sparse-index enabled and disabled
https://travis-ci.com/github/szeder/git-cooking-topics-for-travis-ci/jobs/486702444#L2594
[1] Try to run it with:
https://github.com/szeder/git split-index-fixes
The code is, I believe, close to final, the commit messages,
however, are far from being finished.Show 7 quoted lines
> + > test_expect_success 'cone mode: init and set' ' > git -C repo sparse-checkout init --cone && > git -C repo config --list >config && > -- > gitgitgadget >