]> git.ipfire.org Git - thirdparty/git.git/commitdiff
add-patch: response to unknown command
authorRubén Justo <rjusto@gmail.com>
Mon, 29 Apr 2024 18:37:12 +0000 (20:37 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 30 Apr 2024 19:02:50 +0000 (12:02 -0700)
When the user gives an unknown command to the "add -p" prompt, the list
of accepted commands with their explanation is given.  This is the same
output they get when they say '?'.

However, the unknown command may be due to a user input error rather
than the user not knowing the valid command.

To reduce the likelihood of user confusion and error repetition, instead
of displaying the list of accepted commands, display a short error
message with the unknown command received, as feedback to the user.

Include a reminder about the current command '?' in the new message, to
guide the user if they want help.

Signed-off-by: Rubén Justo <rjusto@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
add-patch.c
t/t3701-add-interactive.sh

index 43abd57ef6aa66ecdbf03a8e0b515378b7fcc05e..85c4770572c0c42ca113a3c98182ae2a23de7d2e 100644 (file)
@@ -1666,7 +1666,7 @@ soft_increment:
                        }
                } else if (s->answer.buf[0] == 'p') {
                        rendered_hunk_index = -1;
-               } else {
+               } else if (s->answer.buf[0] == '?') {
                        const char *p = _(help_patch_remainder), *eol = p;
 
                        color_fprintf(stdout, s->s.help_color, "%s",
@@ -1690,6 +1690,9 @@ soft_increment:
                                color_fprintf_ln(stdout, s->s.help_color,
                                                 "%.*s", (int)(eol - p), p);
                        }
+               } else {
+                       err(s, _("Unknown command '%s' (use '?' for help)"),
+                           s->answer.buf);
                }
        }
 
index 4d4eaca9a1a1673045752d2d8d3dd01a86f41b2f..e9b3b287611a53789f31809ce91f079ecbd1602a 100755 (executable)
@@ -7,6 +7,8 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . ./test-lib.sh
 . "$TEST_DIRECTORY"/lib-terminal.sh
 
+SP=" "
+
 diff_cmp () {
        for x
        do
@@ -55,6 +57,19 @@ test_expect_success 'warn about add.interactive.useBuiltin' '
        done
 '
 
+test_expect_success 'unknown command' '
+       test_when_finished "git reset --hard; rm -f command" &&
+       echo W >command &&
+       git add -N command &&
+       git diff command >expect &&
+       cat >>expect <<-EOF &&
+       (1/1) Stage addition [y,n,q,a,d,e,p,?]? Unknown command ${SQ}W${SQ} (use ${SQ}?${SQ} for help)
+       (1/1) Stage addition [y,n,q,a,d,e,p,?]?$SP
+       EOF
+       git add -p -- command <command >actual 2>&1 &&
+       test_cmp expect actual
+'
+
 test_expect_success 'setup (initial)' '
        echo content >file &&
        git add file &&
@@ -231,7 +246,6 @@ test_expect_success 'setup file' '
 '
 
 test_expect_success 'setup patch' '
-       SP=" " &&
        NULL="" &&
        cat >patch <<-EOF
        @@ -1,4 +1,4 @@