]> git.ipfire.org Git - thirdparty/git.git/commitdiff
built-in add -p: implement the 'q' ("quit") command
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 13 Dec 2019 08:08:04 +0000 (08:08 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 13 Dec 2019 20:37:14 +0000 (12:37 -0800)
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>
add-patch.c

index fd72850c659b79adbabd7aa8e9105279aaa88e93..5e9829a8b42342c54ad15677f928d9b950df42ae 100644 (file)
@@ -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)