mirror of
https://github.com/git/git.git
synced 2024-05-09 17:16:34 +02:00
add-patch: response to unknown command
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. [jc: with a tentative fix-up to keep the test working] Signed-off-by: Rubén Justo <rjusto@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ae3196a5ea
commit
02f4ea5266
19
add-patch.c
19
add-patch.c
|
@ -293,10 +293,10 @@ static void err(struct add_p_state *s, const char *fmt, ...)
|
|||
va_list args;
|
||||
|
||||
va_start(args, fmt);
|
||||
fputs(s->s.error_color, stderr);
|
||||
vfprintf(stderr, fmt, args);
|
||||
fputs(s->s.reset_color, stderr);
|
||||
fputc('\n', stderr);
|
||||
fputs(s->s.error_color, stdout);
|
||||
vfprintf(stdout, fmt, args);
|
||||
fputs(s->s.reset_color, stdout);
|
||||
fputc('\n', stdout);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
@ -1326,7 +1326,7 @@ static int apply_for_checkout(struct add_p_state *s, struct strbuf *diff,
|
|||
err(s, _("Nothing was applied.\n"));
|
||||
} else
|
||||
/* As a last resort, show the diff to the user */
|
||||
fwrite(diff->buf, diff->len, 1, stderr);
|
||||
fwrite(diff->buf, diff->len, 1, stdout);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1667,7 +1667,7 @@ static int patch_update_file(struct add_p_state *s,
|
|||
}
|
||||
} 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",
|
||||
|
@ -1691,6 +1691,9 @@ static int patch_update_file(struct add_p_state *s,
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1777,9 +1780,9 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
|
|||
break;
|
||||
|
||||
if (s.file_diff_nr == 0)
|
||||
fprintf(stderr, _("No changes.\n"));
|
||||
err(&s, _("No changes."));
|
||||
else if (binary_count == s.file_diff_nr)
|
||||
fprintf(stderr, _("Only binary files changed.\n"));
|
||||
err(&s, _("Only binary files changed."));
|
||||
|
||||
add_p_state_clear(&s);
|
||||
return 0;
|
||||
|
|
|
@ -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
|
||||
|
@ -41,20 +43,33 @@ force_color () {
|
|||
}
|
||||
|
||||
test_expect_success 'warn about add.interactive.useBuiltin' '
|
||||
cat >expect <<-\EOF &&
|
||||
cat >expect.error <<-\EOF &&
|
||||
warning: the add.interactive.useBuiltin setting has been removed!
|
||||
See its entry in '\''git help config'\'' for details.
|
||||
No changes.
|
||||
EOF
|
||||
|
||||
for v in = =true =false
|
||||
do
|
||||
git -c "add.interactive.useBuiltin$v" add -p >out 2>actual &&
|
||||
test_must_be_empty out &&
|
||||
test_cmp expect actual || return 1
|
||||
git -c "add.interactive.useBuiltin$v" add -p >actual 2>error &&
|
||||
echo "No changes." >expect &&
|
||||
test_cmp expect actual &&
|
||||
test_cmp expect.error error || return 1
|
||||
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 @@
|
||||
|
@ -334,13 +348,13 @@ test_expect_success 'different prompts for mode change/deleted' '
|
|||
|
||||
test_expect_success 'correct message when there is nothing to do' '
|
||||
git reset --hard &&
|
||||
git add -p 2>err &&
|
||||
test_grep "No changes" err &&
|
||||
git add -p >out &&
|
||||
test_grep "No changes" out &&
|
||||
printf "\\0123" >binary &&
|
||||
git add binary &&
|
||||
printf "\\0abc" >binary &&
|
||||
git add -p 2>err &&
|
||||
test_grep "Only binary files changed" err
|
||||
git add -p >out &&
|
||||
test_grep "Only binary files changed" out
|
||||
'
|
||||
|
||||
test_expect_success 'setup again' '
|
||||
|
|
Loading…
Reference in New Issue