summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Johannes Schindelin <johannes.schindelin@gmx.de>2019-12-13 08:08:04 +0000
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-12-13 12:37:14 -0800
commitade246efed509a68348901e7a085ceb55915bfea (patch)
tree1c3ae6b4497b2a5b18f739b48a7a95183886bc51
parentbuilt-in add -p: implement the '/' ("search regex") command (diff)
downloadtgif-ade246efed509a68348901e7a085ceb55915bfea.tar.xz
built-in add -p: implement the 'q' ("quit") command
This command is actually very similar to the 'd' ("do not stage this hunk or any of the later hunks in the file") command: it just does something on top, namely leave the loop and return a value indicating that we're quittin'. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--add-patch.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/add-patch.c b/add-patch.c
index fd72850c65..5e9829a8b4 100644
--- a/add-patch.c
+++ b/add-patch.c
@@ -12,9 +12,9 @@ enum prompt_mode_type {
};
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,?]? ")
+ N_("Stage mode change [y,n,a,q,d%s,?]? "),
+ N_("Stage deletion [y,n,a,q,d%s,?]? "),
+ N_("Stage this hunk [y,n,a,q,d%s,?]? ")
};
struct hunk_header {
@@ -1006,6 +1006,7 @@ static size_t display_hunks(struct add_p_state *s,
static const char help_patch_text[] =
N_("y - stage this hunk\n"
"n - do not stage this hunk\n"
+ "q - quit; do not stage this hunk or any of the remaining ones\n"
"a - stage this and all the remaining hunks\n"
"d - do not stage this hunk nor any of the remaining hunks\n"
"j - leave this hunk undecided, see next undecided hunk\n"
@@ -1026,7 +1027,7 @@ static int patch_update_file(struct add_p_state *s,
struct hunk *hunk;
char ch;
struct child_process cp = CHILD_PROCESS_INIT;
- int colored = !!s->colored.len;
+ int colored = !!s->colored.len, quit = 0;
enum prompt_mode_type prompt_mode_type;
if (!file_diff->hunk_nr)
@@ -1115,12 +1116,16 @@ soft_increment:
if (hunk->use == UNDECIDED_HUNK)
hunk->use = USE_HUNK;
}
- } else if (ch == 'd') {
+ } else if (ch == 'd' || ch == 'q') {
for (; hunk_index < file_diff->hunk_nr; hunk_index++) {
hunk = file_diff->hunk + hunk_index;
if (hunk->use == UNDECIDED_HUNK)
hunk->use = SKIP_HUNK;
}
+ if (ch == 'q') {
+ quit = 1;
+ break;
+ }
} else if (s->answer.buf[0] == 'K') {
if (hunk_index)
hunk_index--;
@@ -1267,7 +1272,7 @@ soft_increment:
}
putchar('\n');
- return 0;
+ return quit;
}
int run_add_p(struct repository *r, const struct pathspec *ps)