Fix a bug in the --config option that's been there ever since its introduction in 3ac68a93fd2 (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 65f98358c0c (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@xxxxxxxxx> --- Documentation/git-help.txt | 1 + builtin/help.c | 27 ++++++++++++++++++--------- t/t0012-help.sh | 5 ++++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt index cb8e3d4da9e..96d5f598b4b 100644 --- a/Documentation/git-help.txt +++ b/Documentation/git-help.txt @@ -11,6 +11,7 @@ SYNOPSIS 'git help' [-a|--all [--[no-]verbose]] [[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE] 'git help' [-g|--guides] +'git help' [-c|--config] DESCRIPTION ----------- diff --git a/builtin/help.c b/builtin/help.c index 0737b22069b..83f71d6765e 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -62,6 +62,7 @@ static const char * const builtin_help_usage[] = { N_("git help [-a|--all] [--[no-]verbose]]\n" " [[-i|--info] [-m|--man] [-w|--web]] [<command>]"), N_("git help [-g|--guides]"), + N_("git help [-c|--config]"), NULL }; @@ -549,18 +550,26 @@ int cmd_help(int argc, const char **argv, const char *prefix) enum help_format parsed_help_format; const char *page; int standalone = 0; + int need_config = 0; argc = parse_options(argc, argv, prefix, builtin_help_options, builtin_help_usage, 0); parsed_help_format = help_format; + /* Incompatible options */ + if (show_all + !!show_config + show_guides > 1) + usage_with_options(builtin_help_usage, builtin_help_options); + /* Options that take no further arguments */ standalone = show_config || show_guides; if (standalone && argc) usage_with_options(builtin_help_usage, builtin_help_options); - if (show_all) { + need_config = show_all || show_config; + if (need_config) git_config(git_help_config, NULL); + + if (show_all) { if (verbose) { setup_pager(); list_all_cmds_help(); @@ -571,6 +580,14 @@ int cmd_help(int argc, const char **argv, const char *prefix) 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) { int for_human = show_config == 1; @@ -583,14 +600,6 @@ int cmd_help(int argc, const char **argv, const char *prefix) return 0; } - if (show_guides) - list_guides_help(); - - if (show_all || standalone) { - printf("%s\n", _(git_more_info_string)); - return 0; - } - if (!argv[0]) { printf(_("usage: %s%s"), _(git_usage_string), "\n\n"); list_common_cmds_help(); diff --git a/t/t0012-help.sh b/t/t0012-help.sh index 94d1f481c8b..68e7f57470e 100755 --- a/t/t0012-help.sh +++ b/t/t0012-help.sh @@ -36,7 +36,10 @@ test_expect_success 'basic help commands' ' test_expect_success 'invalid usage' ' test_expect_code 129 git help -c git-add && - test_expect_code 129 git help -g git-add + test_expect_code 129 git help -g git-add && + + test_expect_code 129 git help -a -c && + test_expect_code 129 git help -g -c ' test_expect_success "works for commands and guides by default" ' -- 2.33.0.825.g2bf60429931