--- v2
+++ v1
@@ -1,133 +1,35 @@
-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.
+Instead of having two lines that call list_config_help(for_human)
+let's setup the pager and print the trailer conditionally. This makes
+it clearer at a glance how the two differ in behavior.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
- Documentation/git-help.txt | 1 +
- builtin/help.c | 37 +++++++++++++++++++++++++++----------
- t/t0012-help.sh | 7 ++++++-
- 3 files changed, 34 insertions(+), 11 deletions(-)
+ builtin/help.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 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 51b18c291d8..05ba2cbe380 100644
+index 0f9dc31c40f..0737b22069b 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
- };
-
-@@ -548,18 +549,34 @@ int cmd_help(int argc, const char **argv, const char *prefix)
- int nongit;
- enum help_format parsed_help_format;
- const char *page;
-+ 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)
-+ 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) {
-+ 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();
-@@ -570,6 +587,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;
-+ }
-+
+@@ -574,13 +574,12 @@ int cmd_help(int argc, const char **argv, const char *prefix)
if (show_config) {
int for_human = show_config == 1;
-@@ -583,14 +608,6 @@ int cmd_help(int argc, const char **argv, const char *prefix)
+- if (!for_human) {
+- list_config_help(for_human);
+- return 0;
+- }
+- setup_pager();
++ if (for_human)
++ setup_pager();
+ list_config_help(for_human);
+- printf("\n%s\n", _("'git help config' for more information"));
++ if (for_human)
++ printf("\n%s\n", _("'git help config' for more information"));
++
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();
-diff --git a/t/t0012-help.sh b/t/t0012-help.sh
-index 595bf81f133..cbc9b64f79f 100755
---- a/t/t0012-help.sh
-+++ b/t/t0012-help.sh
-@@ -35,7 +35,12 @@ test_expect_success 'basic help commands' '
- '
-
- test_expect_success 'invalid usage' '
-- test_expect_code 129 git help -g git-add
-+ test_expect_code 129 git help -g git-add &&
-+ test_expect_code 129 git help -c 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.873.g125ff7b9940
+2.33.0.825.g2bf60429931