Subject: Re: [PATCH v3 07/10] sparse-checkout: enable reapply to take --[no-]{cone,sparse-index}

From: Junio C Hamano <[email-masked]>
Date: Mon, 13 Dec 2021 10:23:33 -0800

"Elijah Newren via GitGitGadget" <[email-masked]> writes:

> From: Elijah Newren <[email-masked]>
>
> Folks may want to switch to or from cone mode, or to or from a
> sparse-index without changing their sparsity paths.  Allow them to do so
> using the reapply command.

Interesting.

Are there certain pattern that would make sense only in one of the
modes but not the other?  If there isn't any such pattern, this
feature perfectly makes sense, I would think.

If an existing pattern changes its meaning between the old mode and
the new mode, that is very much fine---that is what the user wanted
to achieve by switching between the modes with "reapply".

Thanks.

> Reviewed-by: Derrick Stolee <[email-masked]>
> Reviewed-by: Victoria Dye <[email-masked]>
> Signed-off-by: Elijah Newren <[email-masked]>
> ---
>  builtin/sparse-checkout.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c
> index 1ecdc3ddd5a..9d2a05677c4 100644
> --- a/builtin/sparse-checkout.c
> +++ b/builtin/sparse-checkout.c
> @@ -759,13 +759,22 @@ static int sparse_checkout_set(int argc, const char **argv, const char *prefix)
>  }
>  
>  static char const * const builtin_sparse_checkout_reapply_usage[] = {
> -	N_("git sparse-checkout reapply"),
> +	N_("git sparse-checkout reapply [--[no-]cone] [--[no-]sparse-index] "),
>  	NULL
>  };
>  
> +static struct sparse_checkout_reapply_opts {
> +	int cone_mode;
> +	int sparse_index;
> +} reapply_opts;
> +
>  static int sparse_checkout_reapply(int argc, const char **argv)
>  {
>  	static struct option builtin_sparse_checkout_reapply_options[] = {
> +		OPT_BOOL(0, "cone", &reapply_opts.cone_mode,
> +			 N_("initialize the sparse-checkout in cone mode")),
> +		OPT_BOOL(0, "sparse-index", &reapply_opts.sparse_index,
> +			 N_("toggle the use of a sparse index")),
>  		OPT_END(),
>  	};
>  
> @@ -777,6 +786,13 @@ static int sparse_checkout_reapply(int argc, const char **argv)
>  			     builtin_sparse_checkout_reapply_usage, 0);
>  
>  	repo_read_index(the_repository);
> +
> +	reapply_opts.cone_mode = -1;
> +	reapply_opts.sparse_index = -1;
> +
> +	if (update_modes(&reapply_opts.cone_mode, &reapply_opts.sparse_index))
> +		return 1;
> +
>  	return update_working_directory(NULL);
>  }