summaryrefslogtreecommitdiff
path: root/add-patch.c
diff options
context:
space:
mode:
Diffstat (limited to 'add-patch.c')
-rw-r--r--add-patch.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/add-patch.c b/add-patch.c
index 2007f55e04..171025b08d 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -7,6 +7,16 @@
#include "color.h"
#include "diff.h"
+enum prompt_mode_type {
+ PROMPT_MODE_CHANGE = 0, PROMPT_DELETION, PROMPT_HUNK
+};
+
+static const char *prompt_mode[] = {
+ N_("Stage mode change [y,n,a,d%s,?]? "),
+ N_("Stage deletion [y,n,a,d%s,?]? "),
+ N_("Stage this hunk [y,n,a,d%s,?]? ")
+};
+
struct hunk_header {
unsigned long old_offset, old_count, new_offset, new_count;
/*
@@ -422,6 +432,7 @@ static int patch_update_file(struct add_p_state *s,
char ch;
struct child_process cp = CHILD_PROCESS_INIT;
int colored = !!s->colored.len;
+ enum prompt_mode_type prompt_mode_type;
if (!file_diff->hunk_nr)
return 0;
@@ -466,13 +477,20 @@ static int patch_update_file(struct add_p_state *s,
strbuf_addstr(&s->buf, ",j");
if (hunk_index + 1 < file_diff->hunk_nr)
strbuf_addstr(&s->buf, ",J");
+
+ if (file_diff->deleted)
+ prompt_mode_type = PROMPT_DELETION;
+ else if (file_diff->mode_change && !hunk_index)
+ prompt_mode_type = PROMPT_MODE_CHANGE;
+ else
+ prompt_mode_type = PROMPT_HUNK;
+
color_fprintf(stdout, s->s.prompt_color,
"(%"PRIuMAX"/%"PRIuMAX") ",
(uintmax_t)hunk_index + 1,
(uintmax_t)file_diff->hunk_nr);
color_fprintf(stdout, s->s.prompt_color,
- _("Stage this hunk [y,n,a,d%s,?]? "),
- s->buf.buf);
+ _(prompt_mode[prompt_mode_type]), s->buf.buf);
fflush(stdout);
if (strbuf_getline(&s->answer, stdin) == EOF)
break;