Re: [PATCH 2/7] built-in add -p: implement the "stash" and "reset" patch modes
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Dec 17, 2019, 20:12 UTC
- Message-ID
- <xmqqy2vag19l.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <846cf16e77f4af39310902129be40fda664ace72.1576579264.git.gitgitgadget@gmail.com>
"Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 23 quoted lines
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> The `git stash` and `git reset` commands support a `--patch` option, and
> both simply hand off to `git add -p` to perform that work. Let's teach
> the built-in version of that command to be able to perform that work, too.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
> add-interactive.h | 2 ++
> add-patch.c | 85 ++++++++++++++++++++++++++++++++++++++++++++---
> builtin/add.c | 4 +++
> 3 files changed, 87 insertions(+), 4 deletions(-)
>
> diff --git a/add-interactive.h b/add-interactive.h
> index 3defa2ff3d..c278f3e26f 100644
> --- a/add-interactive.h
> +++ b/add-interactive.h
> @@ -25,6 +25,8 @@ int run_add_i(struct repository *r, const struct pathspec *ps);
>
> enum add_p_mode {
> ADD_P_STAGE,
> + ADD_P_STASH,
> + ADD_P_RESET,As I mentioned in my review on the previous step, ADD_P_ADD would be more descriptive of what is going on when listed together with STASH and RESET here.
Show 45 quoted lines
> +static struct patch_mode patch_mode_reset_head = {
> + .diff = { "diff-index", "--cached", NULL },
> + .apply = { "-R", "--cached", NULL },
> + .apply_check = { "-R", "--cached", NULL },
> + .is_reverse = 1,
> + .index_only = 1,
> + .prompt_mode = {
> + N_("Unstage mode change [y,n,q,a,d%s,?]? "),
> + N_("Unstage deletion [y,n,q,a,d%s,?]? "),
> + N_("Unstage this hunk [y,n,q,a,d%s,?]? "),
> + },
> + .edit_hunk_hint = N_("If the patch applies cleanly, the edited hunk "
> + "will immediately be marked for unstaging."),
> + .help_patch_text =
> + N_("y - unstage this hunk\n"
> + "n - do not unstage this hunk\n"
> + "q - quit; do not unstage this hunk or any of the remaining "
> + "ones\n"
> + "a - unstage this hunk and all later hunks in the file\n"
> + "d - do not unstage this hunk or any of the later hunks in "
> + "the file\n"),
> +};
> +
> +static struct patch_mode patch_mode_reset_nothead = {
> + .diff = { "diff-index", "-R", "--cached", NULL },
> + .apply = { "--cached", NULL },
> + .apply_check = { "--cached", NULL },
> + .is_reverse = 0,
> + .index_only = 1,
> + .prompt_mode = {
> + N_("Apply mode change to index [y,n,q,a,d%s,?]? "),
> + N_("Apply deletion to index [y,n,q,a,d%s,?]? "),
> + N_("Apply this hunk to index [y,n,q,a,d%s,?]? "),
> + },
> + .edit_hunk_hint = N_("If the patch applies cleanly, the edited hunk "
> + "will immediately be marked for applying."),
> + .help_patch_text =
> + N_("y - apply this hunk to index\n"
> + "n - do not apply this hunk to index\n"
> + "q - quit; do not apply this hunk or any of the remaining "
> + "ones\n"
> + "a - apply this hunk and all later hunks in the file\n"
> + "d - do not apply this hunk or any of the later hunks in "
> + "the file\n"),
> +};Interesting that "reset to HEAD" and "reset to non-HEAD" would have to swap the direction to make it feel more natural to the users. This is nothing new---just re-discovering that it is/was interesting.