git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 5/7] help: error if [-a|-g|-c] and [-i|-m|-w] are combined

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Dec 28, 2021, 15:35 UTC
Message-ID
<patch-5.7-12ff152bd57-20211228T153456Z-avarab@gmail.com>
In-Reply-To
<cover-0.7-00000000000-20211228T153456Z-avarab@gmail.com>

Add more sanity checking to "git help" usage by erroring out if these man viewer options are combined with incompatible command-modes that will never use these documentation viewers.

This continues the work started in d35d03cf93e (help: simplify by moving to OPT_CMDMODE(), 2021-09-22) of adding more sanity checking to "git help". Doing this allows us to clarify the "SYNOPSIS" in the documentation, and the "git help -h" output.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 Documentation/git-help.txt |  2 +-
 builtin/help.c             | 20 ++++++++++++++++++--
 t/t0012-help.sh            | 10 ++++++++++
 3 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index cf1d53e9499..61d52d30f6c 100644
--- a/Documentation/git-help.txt
+++ b/Documentation/git-help.txt
@@ -9,7 +9,7 @@ SYNOPSIS
 --------
 [verse]
 'git help' [-a|--all] [--[no-]verbose]
-	   [[-i|--info] [-m|--man] [-w|--web]] [<command>|<guide>]
+'git help' [[-i|--info] [-m|--man] [-w|--web]] [<command>|<guide>]
 'git help' [-g|--guides]
 'git help' [-c|--config]
 
diff --git a/builtin/help.c b/builtin/help.c
index d387131dd83..125f50f1bb0 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -75,8 +75,8 @@ static struct option builtin_help_options[] = {
 };
 
 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 [-a|--all] [--[no-]verbose]]"),
+	N_("git help [[-i|--info] [-m|--man] [-w|--web]] [<command>]"),
 	N_("git help [-g|--guides]"),
 	N_("git help [-c|--config]"),
 	NULL
@@ -581,6 +581,13 @@ static void no_extra_argc(int argc)
 			      builtin_help_usage, builtin_help_options);
 }
 
+static void no_format(void)
+{
+	if (help_format != HELP_FORMAT_NONE)
+		usage_msg_opt(_("[-a|--all] cannot be combined with [[-i|--info] [-m|--man] [-w|--web]]"),
+			      builtin_help_usage, builtin_help_options);
+}
+
 int cmd_help(int argc, const char **argv, const char *prefix)
 {
 	int nongit;
@@ -593,6 +600,7 @@ int cmd_help(int argc, const char **argv, const char *prefix)
 
 	switch (cmd_mode) {
 	case HELP_ACTION_ALL:
+		no_format();
 		if (verbose) {
 			setup_pager();
 			list_all_cmds_help();
@@ -605,19 +613,27 @@ int cmd_help(int argc, const char **argv, const char *prefix)
 		break;
 	case HELP_ACTION_GUIDES:
 		no_extra_argc(argc);
+		no_format();
+
 		list_guides_help();
 		printf("%s\n", _(git_more_info_string));
 		return 0;
 	case HELP_ACTION_CONFIG_FOR_COMPLETION:
 		no_extra_argc(argc);
+		no_format();
+
 		list_config_help(SHOW_CONFIG_VARS);
 		return 0;
 	case HELP_ACTION_CONFIG_SECTIONS_FOR_COMPLETION:
 		no_extra_argc(argc);
+		no_format();
+
 		list_config_help(SHOW_CONFIG_SECTIONS);
 		return 0;
 	case HELP_ACTION_CONFIG:
 		no_extra_argc(argc);
+		no_format();
+
 		setup_pager();
 		list_config_help(SHOW_CONFIG_HUMAN);
 		printf("\n%s\n", _("'git help config' for more information"));
diff --git a/t/t0012-help.sh b/t/t0012-help.sh
index 6ac293c19ed..a8c603abd44 100755
--- a/t/t0012-help.sh
+++ b/t/t0012-help.sh
@@ -46,6 +46,16 @@ test_expect_success 'invalid usage' '
 	test_expect_code 129 git help --config-sections-for-completion add
 '
 
+for opt in '-a' '-g' '-c' '--config-for-completion' '--config-sections-for-completion'
+do
+	test_expect_success "invalid usage of '$opt' with [-i|-m|-w]" '
+		git help $opt &&
+		test_expect_code 129 git help $opt -i &&
+		test_expect_code 129 git help $opt -m &&
+		test_expect_code 129 git help $opt -w
+	'
+done
+
 test_expect_success "works for commands and guides by default" '
 	configure_help &&
 	git help status &&
-- 
2.34.1.1257.g2af47340c7b
Previous: Ævar Arnfjörð BjarmasonNext: Eric Sunshine
Message 6 of 29 in “help: test and fix small "help -g" regression”
  1. 0/7 help: test and fix small "help -g" regressionÆvar Arnfjörð Bjarmason, Dec 28, 2021
  2. 1/7 help doc: add missing "]" to "[-a|--all]"Ævar Arnfjörð Bjarmason, Dec 28, 2021
  3. 2/7 help.c: use puts() instead of printf{,_ln}() for consistencyÆvar Arnfjörð Bjarmason, Dec 28, 2021
  4. 3/7 help tests: test "git" and "git help [-a|-g] spacingÆvar Arnfjörð Bjarmason, Dec 28, 2021
  5. 4/7 help.c: split up list_all_cmds_help() functionÆvar Arnfjörð Bjarmason, Dec 28, 2021
  6. 5/7 help: error if [-a|-g|-c] and [-i|-m|-w] are combinedÆvar Arnfjörð Bjarmason, Dec 28, 2021
  7. Eric SunshineDec 28, 2021
  8. Ævar Arnfjörð BjarmasonDec 29, 2021
  9. 6/7 help: add --no-[external-commands|aliases] for use with --allÆvar Arnfjörð Bjarmason, Dec 28, 2021
  10. Eric SunshineDec 28, 2021
  11. 7/7 help: don't print "\n" before single-section outputÆvar Arnfjörð Bjarmason, Dec 28, 2021
  12. 0/9 help: tests, parse_options() sanity, fix "help -g" regressionÆvar Arnfjörð Bjarmason, Feb 21, 2022
  13. 1/9 help doc: add missing "]" to "[-a|--all]"Ævar Arnfjörð Bjarmason, Feb 21, 2022
  14. 2/9 help.c: use puts() instead of printf{,_ln}() for consistencyÆvar Arnfjörð Bjarmason, Feb 21, 2022
  15. Junio C HamanoFeb 23, 2022
  16. Ævar Arnfjörð BjarmasonFeb 23, 2022
  17. 3/9 help tests: test "git" and "git help [-a|-g] spacingÆvar Arnfjörð Bjarmason, Feb 21, 2022
  18. 6/9 help: correct usage & behavior of "git help --all"Ævar Arnfjörð Bjarmason, Feb 21, 2022
  19. Junio C HamanoFeb 23, 2022
  20. 4/9 help.c: split up list_all_cmds_help() functionÆvar Arnfjörð Bjarmason, Feb 21, 2022
  21. Junio C HamanoFeb 23, 2022
  22. 7/9 help: error if [-a|-g|-c] and [-i|-m|-w] are combinedÆvar Arnfjörð Bjarmason, Feb 21, 2022
  23. Junio C HamanoFeb 23, 2022
  24. 9/9 help: don't print "\n" before single-section outputÆvar Arnfjörð Bjarmason, Feb 21, 2022
  25. Junio C HamanoFeb 23, 2022
  26. 8/9 help: add --no-[external-commands|aliases] for use with --allÆvar Arnfjörð Bjarmason, Feb 21, 2022
  27. Junio C HamanoFeb 23, 2022
  28. 5/9 help: note the option name on option incompatibilityÆvar Arnfjörð Bjarmason, Feb 21, 2022
  29. Junio C HamanoFeb 23, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.