Inter-revision diff: patch 4

Comparing v1 (message) to v2 (message)

--- v1
+++ v2
@@ -1,35 +1,133 @@
-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.
+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>
 ---
- builtin/help.c | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
+ Documentation/git-help.txt |  1 +
+ builtin/help.c             | 37 +++++++++++++++++++++++++++----------
+ t/t0012-help.sh            |  7 ++++++-
+ 3 files changed, 34 insertions(+), 11 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 0f9dc31c40f..0737b22069b 100644
+index 51b18c291d8..05ba2cbe380 100644
 --- a/builtin/help.c
 +++ b/builtin/help.c
-@@ -574,13 +574,12 @@ int cmd_help(int argc, const char **argv, const char *prefix)
+@@ -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;
++	}
++
  	if (show_config) {
  		int for_human = show_config == 1;
  
--		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"));
-+
+@@ -583,14 +608,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();
+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.825.g2bf60429931
+2.33.0.873.g125ff7b9940
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help