[PATCH 3/3] git --help COMMAND brings up the git-COMMAND man-page.
- From
Andreas Ericsson <exon@op5.se>
- Date
- Nov 15, 2005, 23:31 UTC
- Message-ID
- <20051115233125.2C0355BF73@nox.op5.se>
It's by design a bit stupid (matching ^git rather than ^git-), so as to work with 'gitk' and 'git' as well.
Signed-off-by: Andreas Ericsson <ae@op5.se>
---
Documentation/git.txt | 2 ++ git.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-)
applies-to: 8a47ae8a825ab0e68ac46392bccd1ec16df39456 3b7d6e6722b0d27ef5f9ae99a76d3ff909d3e98a
diff --git a/Documentation/git.txt b/Documentation/git.txt index 91e9f9f..7cbfaf8 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -24,6 +24,8 @@ OPTIONS --help:: prints the synopsis and a list of available commands. + If a git command is named this option will bring up the + man-page for that command. --exec-path:: path to wherever your core git programs are installed. diff --git a/git.c b/git.c index d189801..583923d 100644 --- a/git.c +++ b/git.c @@ -160,6 +160,26 @@ static void prepend_to_path(const char * setenv("PATH", path, 1); } +/* has anyone seen 'man' installed anywhere else than in /usr/bin? */ +#define PATH_TO_MAN "/usr/bin/man" +static void show_man_page(char *git_cmd) +{ + char *page; + + if (!strncmp(git_cmd, "git", 3)) + page = git_cmd; + else { + int page_len = strlen(git_cmd) + 4; + + page = malloc(page_len + 1); + strcpy(page, "git-"); + strcpy(page + 4, git_cmd); + page[page_len] = 0; + } + + execlp(PATH_TO_MAN, "man", page, NULL); +} + int main(int argc, char **argv, char **envp) { char git_command[PATH_MAX + 1]; @@ -199,8 +219,12 @@ int main(int argc, char **argv, char **e usage(NULL, NULL); } - if (i >= argc || show_help) - usage(exec_path, NULL); + if (i >= argc || show_help) { + if (i >= argc) + usage(exec_path, NULL); + + show_man_page(argv[i]); + } /* allow relative paths, but run with exact */ if (chdir(exec_path)) { --- 0.99.9.GIT