From 70087cdbd3671f5929689a9b77f414b8297641c2 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sat, 15 Dec 2007 05:57:28 +0100 Subject: [PATCH] git-help: add "help.format" config variable. This config variable makes it possible to choose the default format used to display help. This format will be used only if no option like -a|--all|-i|--info|-m|--man|-w|--web is passed to "git-help". The following values are possible for this variable: - "man" --> "man" program is used - "info" --> "info" program is used - "web" --> "git-browse-help" is used By default we still show help using "man". This patch also adds -m|--man command line option to use "man" to allow overriding the "help.format" configuration variable. Note that this patch also revert some recent changes in "git-browse-help" because they prevented to look for config variables in the global configuration file. Signed-off-by: Christian Couder Signed-off-by: Junio C Hamano --- Documentation/git-help.txt | 37 ++++++++++++++++++++-- git-browse-help.sh | 4 +-- git-sh-setup.sh | 7 +---- help.c | 64 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 100 insertions(+), 12 deletions(-) diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt index ac9e15d77..31ec403a7 100644 --- a/Documentation/git-help.txt +++ b/Documentation/git-help.txt @@ -7,7 +7,7 @@ git-help - display help information about git SYNOPSIS -------- -'git help' [-a|--all|-i|--info|-w|--web] [COMMAND] +'git help' [-a|--all|-i|--info|-m|--man|-w|--web] [COMMAND] DESCRIPTION ----------- @@ -21,7 +21,7 @@ printed on the standard output. If a git command is named, a manual page for that command is brought up. The 'man' program is used by default for this purpose, but this -can be overriden by other options. +can be overriden by other options or configuration variables. Note that 'git --help ...' is identical as 'git help ...' because the former is internally converted into the latter. @@ -36,6 +36,11 @@ OPTIONS Use the 'info' program to display the manual page, instead of the 'man' program that is used by default. +-m|--man:: + Use the 'man' program to display the manual page. This may be + used to override a value set in the 'help.format' + configuration variable. + -w|--web:: Use a web browser to display the HTML manual page, instead of the 'man' program that is used by default. @@ -54,6 +59,34 @@ is available in PATH. Note that the script tries, as much as possible, to display the HTML page in a new tab on an already opened browser. +CONFIGURATION VARIABLES +----------------------- + +If no command line option is passed, the 'help.format' configuration +variable will be checked. The following values are supported for this +variable; they make 'git-help' behave as their corresponding command +line option: + +* "man" corresponds to '-m|--man', +* "info" corresponds to '-i|--info', +* "web" or "html" correspond to '-w|--web', + +The 'help.browser', 'web.browser' and 'browser..path' will also +be checked if the 'web' format is choosen (either by command line +option or configuration variable). See '-w|--web' in the OPTIONS +section above. + +Note that these configuration variables should probably be set using +the '--global' flag, for example like this: + +------------------------------------------------ +$ git config --global help.format web +$ git config --global web.browser firefox +------------------------------------------------ + +as they are probably more user specific than repository specific. +See gitlink:git-config[1] for more information about this. + Author ------ Written by Junio C Hamano and the git-list diff --git a/git-browse-help.sh b/git-browse-help.sh index b465911c9..10b0a36a3 100755 --- a/git-browse-help.sh +++ b/git-browse-help.sh @@ -39,7 +39,7 @@ valid_tool() { } init_browser_path() { - test -z "$GIT_DIR" || browser_path=`git config browser.$1.path` + browser_path=`git config browser.$1.path` test -z "$browser_path" && browser_path=$1 } @@ -71,7 +71,7 @@ do shift done -if test -z "$browser" && test -n "$GIT_DIR" +if test -z "$browser" then for opt in "help.browser" "web.browser" do diff --git a/git-sh-setup.sh b/git-sh-setup.sh index b366761b9..270d55929 100755 --- a/git-sh-setup.sh +++ b/git-sh-setup.sh @@ -124,13 +124,8 @@ get_author_ident_from_commit () { # Make sure we are in a valid repository of a vintage we understand, # if we require to be in a git repository. -if test -n "$NONGIT_OK" +if test -z "$NONGIT_OK" then - if git rev-parse --git-dir >/dev/null 2>&1 - then - : ${GIT_DIR=.git} - fi -else if [ -z "$SUBDIRECTORY_OK" ] then : ${GIT_DIR=.git} diff --git a/help.c b/help.c index c96b1670f..551b5b93b 100644 --- a/help.c +++ b/help.c @@ -8,6 +8,44 @@ #include "exec_cmd.h" #include "common-cmds.h" +static const char *help_default_format; + +static enum help_format { + man_format, + info_format, + web_format, +} help_format = man_format; + +static void parse_help_format(const char *format) +{ + if (!format) { + help_format = man_format; + return; + } + if (!strcmp(format, "man")) { + help_format = man_format; + return; + } + if (!strcmp(format, "info")) { + help_format = info_format; + return; + } + if (!strcmp(format, "web") || !strcmp(format, "html")) { + help_format = web_format; + return; + } + die("unrecognized help format '%s'", format); +} + +static int git_help_config(const char *var, const char *value) +{ + if (!strcmp(var, "help.format")) { + help_default_format = xstrdup(value); + return 0; + } + return git_default_config(var, value); +} + /* most GUI terminals set COLUMNS (although some don't export it) */ static int term_columns(void) { @@ -331,8 +369,30 @@ int cmd_help(int argc, const char **argv, const char *prefix) show_info_page(argc > 2 ? argv[2] : NULL); } - else - show_man_page(help_cmd); + else if (!strcmp(help_cmd, "--man") || !strcmp(help_cmd, "-m")) { + show_man_page(argc > 2 ? argv[2] : NULL); + } + + else { + int nongit; + + setup_git_directory_gently(&nongit); + git_config(git_help_config); + if (help_default_format) + parse_help_format(help_default_format); + + switch (help_format) { + case man_format: + show_man_page(help_cmd); + break; + case info_format: + show_info_page(help_cmd); + break; + case web_format: + show_html_page(help_cmd); + break; + } + } return 0; } -- 2.30.2