1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-09 07:56:11 +02:00

git --help COMMAND brings up the git-COMMAND man-page.

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>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Andreas Ericsson 2005-11-16 00:31:25 +01:00 committed by Junio C Hamano
parent cb22bc4447
commit 97fc6c5fba
2 changed files with 28 additions and 2 deletions

View File

@ -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.

28
git.c
View File

@ -160,6 +160,26 @@ static void prepend_to_path(const char *dir, int len)
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 **envp)
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)) {