]> git.ipfire.org Git - thirdparty/git.git/commitdiff
help: correct logic error in combining --all and --config
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 21 Sep 2021 22:40:34 +0000 (00:40 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Sep 2021 17:30:43 +0000 (10:30 -0700)
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@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-help.txt
builtin/help.c
t/t0012-help.sh

index cb8e3d4da9e328753ab7d1e34a3c25245f067733..96d5f598b4b583332bd49b13954f9fcf77294ff8 100644 (file)
@@ -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
 -----------
index 51b18c291d8d6f9af25a6c66d3f71c82700a25e9..d0c9605dbb5d0b03a6b102f31208b0507576614f 100644 (file)
@@ -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
 };
 
@@ -553,9 +554,21 @@ int cmd_help(int argc, const char **argv, const char *prefix)
                        builtin_help_usage, 0);
        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 */
+       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)
-               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);
 
        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);
        }
 
+       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 +604,6 @@ int cmd_help(int argc, const char **argv, const char *prefix)
                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]) {
                printf(_("usage: %s%s"), _(git_usage_string), "\n\n");
                list_common_cmds_help();
index 63c4adb99be45d1685eec294f2e4403e208eb579..b4ed6229ed89c563fef7228d39cd113584a13d34 100755 (executable)
@@ -35,7 +35,8 @@ test_expect_success 'basic help commands' '
 '
 
 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" '