summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/git-help.txt37
-rwxr-xr-xgit-browse-help.sh4
-rwxr-xr-xgit-sh-setup.sh7
-rw-r--r--help.c64
4 files changed, 100 insertions, 12 deletions
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index ac9e15d..31ec403 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.<tool>.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 <gitster@pobox.com> and the git-list
diff --git a/git-browse-help.sh b/git-browse-help.sh
index b465911..10b0a36 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 b366761..270d559 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 c96b167..551b5b9 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;
}