help: correct logic error in combining --all and --config

Fix a bug in the --config option that's been there ever since its
introduction in 3ac68a93fd (help: add --config to list all available
config, 2018-05-26). Die when --all and --config are combined,
combining them doesn't make sense.

The code for the --config option when combined with an earlier
refactoring done to support the --guide option in
65f98358c0 (builtin/help.c: add --guide option, 2013-04-02) would
cause us to take the "--all" branch early and ignore the --config
option.

Let's instead list these as incompatible, both in the synopsis and
help output, and enforce it in the code itself.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2021-09-22 00:40:34 +02:00 committed by Junio C Hamano
parent ff76fc841f
commit 1ed4bef6b4
3 changed files with 25 additions and 10 deletions

View File

@ -11,6 +11,7 @@ SYNOPSIS
'git help' [-a|--all [--[no-]verbose]] 'git help' [-a|--all [--[no-]verbose]]
[[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE] [[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE]
'git help' [-g|--guides] 'git help' [-g|--guides]
'git help' [-c|--config]
DESCRIPTION DESCRIPTION
----------- -----------

View File

@ -62,6 +62,7 @@ static const char * const builtin_help_usage[] = {
N_("git help [-a|--all] [--[no-]verbose]]\n" N_("git help [-a|--all] [--[no-]verbose]]\n"
" [[-i|--info] [-m|--man] [-w|--web]] [<command>]"), " [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
N_("git help [-g|--guides]"), N_("git help [-g|--guides]"),
N_("git help [-c|--config]"),
NULL NULL
}; };
@ -553,9 +554,21 @@ int cmd_help(int argc, const char **argv, const char *prefix)
builtin_help_usage, 0); builtin_help_usage, 0);
parsed_help_format = help_format; parsed_help_format = help_format;
/* Incompatible options */
if (show_all && show_config)
usage_msg_opt(_("--config and --all cannot be combined"),
builtin_help_usage, builtin_help_options);
if (show_config && show_guides)
usage_msg_opt(_("--config and --guides cannot be combined"),
builtin_help_usage, builtin_help_options);
/* Options that take no further arguments */ /* Options that take no further arguments */
if (argc && show_config)
usage_msg_opt(_("--config cannot be combined with command or guide names"),
builtin_help_usage, builtin_help_options);
if (argc && show_guides) if (argc && show_guides)
usage_msg_opt(_("--guides cannot be combined with other options"), usage_msg_opt(_("--guides cannot be combined with command or guide names"),
builtin_help_usage, builtin_help_options); builtin_help_usage, builtin_help_options);
if (show_all) { if (show_all) {
@ -570,6 +583,14 @@ int cmd_help(int argc, const char **argv, const char *prefix)
list_commands(colopts, &main_cmds, &other_cmds); list_commands(colopts, &main_cmds, &other_cmds);
} }
if (show_guides)
list_guides_help();
if (show_all || show_guides) {
printf("%s\n", _(git_more_info_string));
return 0;
}
if (show_config) { if (show_config) {
int for_human = show_config == 1; int for_human = show_config == 1;
@ -583,14 +604,6 @@ int cmd_help(int argc, const char **argv, const char *prefix)
return 0; return 0;
} }
if (show_guides)
list_guides_help();
if (show_all || show_guides) {
printf("%s\n", _(git_more_info_string));
return 0;
}
if (!argv[0]) { if (!argv[0]) {
printf(_("usage: %s%s"), _(git_usage_string), "\n\n"); printf(_("usage: %s%s"), _(git_usage_string), "\n\n");
list_common_cmds_help(); list_common_cmds_help();

View File

@ -35,7 +35,8 @@ test_expect_success 'basic help commands' '
' '
test_expect_success 'invalid usage' ' test_expect_success 'invalid usage' '
test_expect_code 129 git help -g add test_expect_code 129 git help -g add &&
test_expect_code 129 git help -a -c
' '
test_expect_success "works for commands and guides by default" ' test_expect_success "works for commands and guides by default" '