Skip to content

Commit 1ed4bef

Browse files
avargitster
authored andcommitted
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 3ac68a9 (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 65f9835 (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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent ff76fc8 commit 1ed4bef

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

Documentation/git-help.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ SYNOPSIS
1111
'git help' [-a|--all [--[no-]verbose]]
1212
[[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE]
1313
'git help' [-g|--guides]
14+
'git help' [-c|--config]
1415

1516
DESCRIPTION
1617
-----------

builtin/help.c

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ static const char * const builtin_help_usage[] = {
6262
N_("git help [-a|--all] [--[no-]verbose]]\n"
6363
" [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
6464
N_("git help [-g|--guides]"),
65+
N_("git help [-c|--config]"),
6566
NULL
6667
};
6768

@@ -553,9 +554,21 @@ int cmd_help(int argc, const char **argv, const char *prefix)
553554
builtin_help_usage, 0);
554555
parsed_help_format = help_format;
555556

557+
/* Incompatible options */
558+
if (show_all && show_config)
559+
usage_msg_opt(_("--config and --all cannot be combined"),
560+
builtin_help_usage, builtin_help_options);
561+
562+
if (show_config && show_guides)
563+
usage_msg_opt(_("--config and --guides cannot be combined"),
564+
builtin_help_usage, builtin_help_options);
565+
556566
/* Options that take no further arguments */
567+
if (argc && show_config)
568+
usage_msg_opt(_("--config cannot be combined with command or guide names"),
569+
builtin_help_usage, builtin_help_options);
557570
if (argc && show_guides)
558-
usage_msg_opt(_("--guides cannot be combined with other options"),
571+
usage_msg_opt(_("--guides cannot be combined with command or guide names"),
559572
builtin_help_usage, builtin_help_options);
560573

561574
if (show_all) {
@@ -570,6 +583,14 @@ int cmd_help(int argc, const char **argv, const char *prefix)
570583
list_commands(colopts, &main_cmds, &other_cmds);
571584
}
572585

586+
if (show_guides)
587+
list_guides_help();
588+
589+
if (show_all || show_guides) {
590+
printf("%s\n", _(git_more_info_string));
591+
return 0;
592+
}
593+
573594
if (show_config) {
574595
int for_human = show_config == 1;
575596

@@ -583,14 +604,6 @@ int cmd_help(int argc, const char **argv, const char *prefix)
583604
return 0;
584605
}
585606

586-
if (show_guides)
587-
list_guides_help();
588-
589-
if (show_all || show_guides) {
590-
printf("%s\n", _(git_more_info_string));
591-
return 0;
592-
}
593-
594607
if (!argv[0]) {
595608
printf(_("usage: %s%s"), _(git_usage_string), "\n\n");
596609
list_common_cmds_help();

t/t0012-help.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ test_expect_success 'basic help commands' '
3535
'
3636

3737
test_expect_success 'invalid usage' '
38-
test_expect_code 129 git help -g add
38+
test_expect_code 129 git help -g add &&
39+
test_expect_code 129 git help -a -c
3940
'
4041

4142
test_expect_success "works for commands and guides by default" '

0 commit comments

Comments
 (0)