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

[PATCH v2 3/3] help: make option --help open man pages only for Git commands

From
Ralf Thielow <ralf.thielow@gmail.com>
Date
Aug 26, 2016, 17:58 UTC
Message-ID
<20160826175836.14073-4-ralf.thielow@gmail.com>
In-Reply-To
<20160826175836.14073-1-ralf.thielow@gmail.com>

If option --help is passed to a Git command, we try to open the man page of that command. However, we do it for both commands and concepts. Make sure it is an actual command.

This makes "git <concept> --help" not working anymore, while "git help <concept>" still works.

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
---
 Documentation/git-help.txt |  5 +++--
 git.c                      | 15 ++++++++++++++-
 t/t0012-help.sh            |  8 ++++++++
 3 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index eeb1950..8d21e9f 100644
--- a/Documentation/git-help.txt
+++ b/Documentation/git-help.txt
@@ -29,8 +29,9 @@ guide is brought up. The 'man' program is used by default for this
 purpose, but this can be overridden by other options or configuration
 variables.
 
-Note that `git --help ...` is identical to `git help ...` because the
-former is internally converted into the latter.
+Note that `git --help ...` is almost identical to `git help ...` because
+the former is internally converted into the latter with option --exclude-guides
+being added.
 
 To display the linkgit:git[1] man page, use `git help git`.
 
diff --git a/git.c b/git.c
index 0f1937f..1c61151 100644
--- a/git.c
+++ b/git.c
@@ -522,21 +522,34 @@ static void strip_extension(const char **argv)
 
 static void handle_builtin(int argc, const char **argv)
 {
+	struct argv_array args = ARGV_ARRAY_INIT;
 	const char *cmd;
 	struct cmd_struct *builtin;
 
 	strip_extension(argv);
 	cmd = argv[0];
 
-	/* Turn "git cmd --help" into "git help cmd" */
+	/* Turn "git cmd --help" into "git help --exclude-guides cmd" */
 	if (argc > 1 && !strcmp(argv[1], "--help")) {
+		int i;
+
 		argv[1] = argv[0];
 		argv[0] = cmd = "help";
+
+		for (i = 0; i < argc; i++) {
+			argv_array_push(&args, argv[i]);
+			if (!i)
+				argv_array_push(&args, "--exclude-guides");
+		}
+
+		argc++;
+		argv = args.argv;
 	}
 
 	builtin = get_builtin(cmd);
 	if (builtin)
 		exit(run_builtin(builtin, argc, argv));
+	argv_array_clear(&args);
 }
 
 static void execv_dashed_external(const char **argv)
diff --git a/t/t0012-help.sh b/t/t0012-help.sh
index fb1abd7..2b90947 100755
--- a/t/t0012-help.sh
+++ b/t/t0012-help.sh
@@ -30,4 +30,12 @@ test_expect_success "--exclude-guides does not work for guides" "
 	test_i18ncmp expected actual
 "
 
+test_expect_success "--help does not work for guides" "
+	cat <<-EOF >expected &&
+		git: 'revisions' is not a git command. See 'git --help'.
+	EOF
+	test_must_fail git revisions --help 2>actual &&
+	test_i18ncmp expected actual
+"
+
 test_done
-- 
2.9.2.912.gd0c0e83
Previous: Ralf ThielowNext: Ralf Thielow
Message 38 of 46 in “`git stash --help` tries to pull up nonexistent file gitstack.html”
  1. Joseph MusserAug 12, 2016
  2. Junio C HamanoAug 12, 2016
  3. Lars SchneiderAug 12, 2016
  4. Joseph MusserAug 12, 2016
  5. Junio C HamanoAug 12, 2016
  6. Jacob KellerAug 12, 2016
  7. help: make option --help open man pages only for Git commandsRalf Thielow, Aug 12, 2016
  8. Junio C HamanoAug 12, 2016
  9. Junio C HamanoAug 12, 2016
  10. Philip OakleyAug 13, 2016
  11. Junio C HamanoAug 13, 2016
  12. help: make option --help open man pages only for Git commandsRalf Thielow, Aug 15, 2016
  13. Philip OakleyAug 15, 2016
  14. Junio C HamanoAug 15, 2016
  15. Philip OakleyAug 15, 2016
  16. Junio C HamanoAug 15, 2016
  17. John KeepingAug 16, 2016
  18. help: make option --help open man pages only for Git commandsRalf Thielow, Aug 16, 2016
  19. John KeepingAug 16, 2016
  20. Ralf ThielowAug 16, 2016
  21. Junio C HamanoAug 16, 2016
  22. Ralf ThielowAug 16, 2016
  23. Junio C HamanoAug 16, 2016
  24. 0/2 help: make option --help open man pages only for Git commandsRalf Thielow, Aug 18, 2016
  25. 1/2 help: introduce option --command-onlyRalf Thielow, Aug 18, 2016
  26. Philip OakleyAug 18, 2016
  27. 2/2 help: make option --help open man pages only for Git commandsRalf Thielow, Aug 18, 2016
  28. Junio C HamanoAug 18, 2016
  29. Ralf ThielowAug 23, 2016
  30. Remi Galan AlfonsoAug 19, 2016
  31. Ralf ThielowAug 23, 2016
  32. Johannes SchindelinAug 19, 2016
  33. Junio C HamanoAug 19, 2016
  34. Ralf ThielowAug 23, 2016
  35. Johannes SchindelinAug 24, 2016
  36. 0/3 help: make option --help open man pages only for Git commandsRalf Thielow, Aug 26, 2016
  37. 1/3 Revert "display HTML in default browser using Windows' shell API"Ralf Thielow, Aug 26, 2016
  38. 3/3 help: make option --help open man pages only for Git commandsRalf Thielow, Aug 26, 2016
  39. 2/3 help: introduce option --exclude-guidesRalf Thielow, Aug 26, 2016
  40. Junio C HamanoAug 26, 2016
  41. Junio C HamanoAug 26, 2016
  42. Ralf ThielowAug 26, 2016
  43. Junio C HamanoAug 26, 2016
  44. Ralf ThielowAug 26, 2016
  45. Junio C HamanoAug 26, 2016
  46. Ralf ThielowAug 26, 2016

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.