mirror of
https://github.com/git/git
synced 2024-10-30 14:03:28 +00:00
sparse-checkout: disable sparse-index
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
122ba1f7b5
commit
dcc5fd5fd2
2 changed files with 22 additions and 1 deletions
|
@ -280,6 +280,9 @@ static int set_config(enum sparse_checkout_mode mode)
|
||||||
"core.sparseCheckoutCone",
|
"core.sparseCheckoutCone",
|
||||||
mode == MODE_CONE_PATTERNS ? "true" : NULL);
|
mode == MODE_CONE_PATTERNS ? "true" : NULL);
|
||||||
|
|
||||||
|
if (mode == MODE_NO_PATTERNS)
|
||||||
|
set_sparse_index_config(the_repository, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,10 +344,11 @@ static int sparse_checkout_init(int argc, const char **argv)
|
||||||
the_repository->index->updated_workdir = 1;
|
the_repository->index->updated_workdir = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
core_apply_sparse_checkout = 1;
|
||||||
|
|
||||||
/* If we already have a sparse-checkout file, use it. */
|
/* If we already have a sparse-checkout file, use it. */
|
||||||
if (res >= 0) {
|
if (res >= 0) {
|
||||||
free(sparse_filename);
|
free(sparse_filename);
|
||||||
core_apply_sparse_checkout = 1;
|
|
||||||
return update_working_directory(NULL);
|
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);
|
add_pattern(strbuf_detach(&pattern, NULL), empty_base, 0, &pl, 0);
|
||||||
strbuf_addstr(&pattern, "!/*/");
|
strbuf_addstr(&pattern, "!/*/");
|
||||||
add_pattern(strbuf_detach(&pattern, NULL), empty_base, 0, &pl, 0);
|
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);
|
return write_patterns_and_update(&pl);
|
||||||
}
|
}
|
||||||
|
@ -632,6 +637,9 @@ static int sparse_checkout_disable(int argc, const char **argv)
|
||||||
strbuf_addstr(&match_all, "/*");
|
strbuf_addstr(&match_all, "/*");
|
||||||
add_pattern(strbuf_detach(&match_all, NULL), empty_base, 0, &pl, 0);
|
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))
|
if (update_working_directory(&pl))
|
||||||
die(_("error while refreshing working directory"));
|
die(_("error while refreshing working directory"));
|
||||||
|
|
||||||
|
|
|
@ -205,6 +205,19 @@ test_expect_success 'sparse-checkout disable' '
|
||||||
check_files repo a deep folder1 folder2
|
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 index.sparse &&
|
||||||
|
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 index.sparse config
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'cone mode: init and set' '
|
test_expect_success 'cone mode: init and set' '
|
||||||
git -C repo sparse-checkout init --cone &&
|
git -C repo sparse-checkout init --cone &&
|
||||||
git -C repo config --list >config &&
|
git -C repo config --list >config &&
|
||||||
|
|
Loading…
Reference in a new issue