@matheusbsbs / matheus-bagliano / commits / 0ecd9d27fc
Fork 0

built-in add -p: show different prompts for mode changes and deletions

Just like the Perl version, we now helpfully ask the user whether they want to stage a mode change, or a deletion. Note that we define the prompts in an array, in preparation for a later patch that changes those prompts to yet different versions for `git reset -p`, `git stash -p` and `git checkout -p` (which all call the `git add -p` machinery to do the actual work). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed Dec 13, 2019 at 08:07 UTC 0ecd9d27fc3b38c19cf75d7cad98d0120adb7383
1 file changed +20 -2
add-patch.c
+20 -2
@@ -7,6 +7,16 @@
7 #include "color.h"
8 #include "diff.h"
9
10 +enum prompt_mode_type {
11 + PROMPT_MODE_CHANGE = 0, PROMPT_DELETION, PROMPT_HUNK
12 +};
13 +
14 +static const char *prompt_mode[] = {
15 + N_("Stage mode change [y,n,a,d%s,?]? "),
16 + N_("Stage deletion [y,n,a,d%s,?]? "),
17 + N_("Stage this hunk [y,n,a,d%s,?]? ")
18 +};
19 +
20 struct hunk_header {
21 unsigned long old_offset, old_count, new_offset, new_count;
22 /*
@@ -422,6 +432,7 @@ static int patch_update_file(struct add_p_state *s,
432 char ch;
433 struct child_process cp = CHILD_PROCESS_INIT;
434 int colored = !!s->colored.len;
435 + enum prompt_mode_type prompt_mode_type;
436
437 if (!file_diff->hunk_nr)
438 return 0;
@@ -466,13 +477,20 @@ static int patch_update_file(struct add_p_state *s,
477 strbuf_addstr(&s->buf, ",j");
478 if (hunk_index + 1 < file_diff->hunk_nr)
479 strbuf_addstr(&s->buf, ",J");
480 +
481 + if (file_diff->deleted)
482 + prompt_mode_type = PROMPT_DELETION;
483 + else if (file_diff->mode_change && !hunk_index)
484 + prompt_mode_type = PROMPT_MODE_CHANGE;
485 + else
486 + prompt_mode_type = PROMPT_HUNK;
487 +
488 color_fprintf(stdout, s->s.prompt_color,
489 "(%"PRIuMAX"/%"PRIuMAX") ",
490 (uintmax_t)hunk_index + 1,
491 (uintmax_t)file_diff->hunk_nr);
492 color_fprintf(stdout, s->s.prompt_color,
474 - _("Stage this hunk [y,n,a,d%s,?]? "),
475 - s->buf.buf);
493 + _(prompt_mode[prompt_mode_type]), s->buf.buf);
494 fflush(stdout);
495 if (strbuf_getline(&s->answer, stdin) == EOF)
496 break;