sparse-checkout: use in-process update for disable subcommand
The 'git sparse-checkout disable' subcommand returns a user to a full working directory. The old process for doing this required updating the sparse-checkout file with the "/*" pattern and then updating the working directory with core.sparseCheckout enabled. Finally, the sparse-checkout file could be removed and the config setting disabled. However, it is valuable to keep a user's sparse-checkout file intact so they can re-enable the sparse-checkout they previously used with 'git sparse-checkout init'. This is now possible with the in-process mechanism for updating the working directory. Reported-by: Szeder Gábor <szeder.dev@gmail.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
e091228e17
commit
99dfa6f970
@ -412,24 +412,23 @@ static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
|
||||
|
||||
static int sparse_checkout_disable(int argc, const char **argv)
|
||||
{
|
||||
char *sparse_filename;
|
||||
FILE *fp;
|
||||
|
||||
if (set_config(MODE_ALL_PATTERNS))
|
||||
die(_("failed to change config"));
|
||||
|
||||
sparse_filename = get_sparse_checkout_filename();
|
||||
fp = xfopen(sparse_filename, "w");
|
||||
fprintf(fp, "/*\n");
|
||||
fclose(fp);
|
||||
static const char *empty_base = "";
|
||||
struct pattern_list pl;
|
||||
struct strbuf match_all = STRBUF_INIT;
|
||||
|
||||
memset(&pl, 0, sizeof(pl));
|
||||
hashmap_init(&pl.recursive_hashmap, pl_hashmap_cmp, NULL, 0);
|
||||
hashmap_init(&pl.parent_hashmap, pl_hashmap_cmp, NULL, 0);
|
||||
pl.use_cone_patterns = 0;
|
||||
core_apply_sparse_checkout = 1;
|
||||
if (update_working_directory(NULL))
|
||||
|
||||
strbuf_addstr(&match_all, "/*");
|
||||
add_pattern(strbuf_detach(&match_all, NULL), empty_base, 0, &pl, 0);
|
||||
|
||||
if (update_working_directory(&pl))
|
||||
die(_("error while refreshing working directory"));
|
||||
|
||||
unlink(sparse_filename);
|
||||
free(sparse_filename);
|
||||
|
||||
clear_pattern_list(&pl);
|
||||
return set_config(MODE_NO_PATTERNS);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user