help: correct usage & behavior of "git help --guides"

As noted in 65f98358c0c (builtin/help.c: add --guide option, 2013-04-02) and a133737b809 (doc: include --guide option description for "git help", 2013-04-02) which introduced the --guide option, it cannot be combined with e.g. <command>. Change the command and the "SYNOPSIS" section to reflect that desired behavior. Now that we assert this in code we don't need to exhaustively describe the previous confusing behavior in the documentation either, instead of silently ignoring the provided argument we'll now error out. The "We're done. Ignore any remaining args" comment added in 15f7d494380 (builtin/help.c: split "-a" processing into two, 2013-04-02) can now be removed, it's obvious that we're asserting the behavior with the check of "argc". The "--config" option is still missing from the synopsis, it will be added in a subsequent commit where we'll fix bugs in its implementation. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Sep 22, 2021 at 00:40 UTC 9856ea6785c3dcd19ffb3946c6a9adbd16d9c1da
3 files changed +14 -7
Documentation/git-help.txt
+3 -3
@@ -8,8 +8,9 @@ git-help - Display help information about Git
8 SYNOPSIS
9 --------
10 [verse]
11 -'git help' [-a|--all [--[no-]verbose]] [-g|--guides]
11 +'git help' [-a|--all [--[no-]verbose]]
12 [[-i|--info] [-m|--man] [-w|--web]] [COMMAND|GUIDE]
13 +'git help' [-g|--guides]
14
15 DESCRIPTION
16 -----------
@@ -58,8 +59,7 @@ OPTIONS
59
60 -g::
61 --guides::
61 - Prints a list of the Git concept guides on the standard output. This
62 - option overrides any given command or guide name.
62 + Prints a list of the Git concept guides on the standard output.
63
64 -i::
65 --info::
builtin/help.c
+7 -4
@@ -59,8 +59,9 @@ static struct option builtin_help_options[] = {
59 };
60
61 static const char * const builtin_help_usage[] = {
62 - N_("git help [-a|--all] [-g|--guides] [--[no-]verbose]]\n"
62 + N_("git help [-a|--all] [--[no-]verbose]]\n"
63 " [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
64 + N_("git help [-g|--guides]"),
65 NULL
66 };
67
@@ -552,6 +553,11 @@ int cmd_help(int argc, const char **argv, const char *prefix)
553 builtin_help_usage, 0);
554 parsed_help_format = help_format;
555
556 + /* Options that take no further arguments */
557 + if (argc && show_guides)
558 + usage_msg_opt(_("--guides cannot be combined with other options"),
559 + builtin_help_usage, builtin_help_options);
560 +
561 if (show_all) {
562 git_config(git_help_config, NULL);
563 if (verbose) {
@@ -582,9 +588,6 @@ int cmd_help(int argc, const char **argv, const char *prefix)
588
589 if (show_all || show_guides) {
590 printf("%s\n", _(git_more_info_string));
585 - /*
586 - * We're done. Ignore any remaining args
587 - */
591 return 0;
592 }
593
t/t0012-help.sh
+4
@@ -34,6 +34,10 @@ test_expect_success 'basic help commands' '
34 git help -a >/dev/null
35 '
36
37 +test_expect_success 'invalid usage' '
38 + test_expect_code 129 git help -g add
39 +'
40 +
41 test_expect_success "works for commands and guides by default" '
42 configure_help &&
43 git help status &&