]> asedeno.scripts.mit.edu Git - git.git/commitdiff
git-help: add "help.format" config variable.
authorChristian Couder <chriscool@tuxfamily.org>
Sat, 15 Dec 2007 04:57:28 +0000 (05:57 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 15 Dec 2007 05:58:35 +0000 (21:58 -0800)
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 <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-help.txt
git-browse-help.sh
git-sh-setup.sh
help.c

index ac9e15d7748a17bdd552acfb0c690ffea459a87c..31ec403a705456b0fcc41eb7196484e0919eccae 100644 (file)
@@ -7,7 +7,7 @@ git-help - display help information about git
 
 SYNOPSIS
 --------
 
 SYNOPSIS
 --------
-'git help' [-a|--all|-i|--info|-w|--web] [COMMAND]
+'git help' [-a|--all|-i|--info|-m|--man|-w|--web] [COMMAND]
 
 DESCRIPTION
 -----------
 
 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
 
 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.
 
 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.
 
        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.
 -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.
 
 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
 Author
 ------
 Written by Junio C Hamano <gitster@pobox.com> and the git-list
index b465911c9a418d79f5ff592d9c409b70d92d49e9..10b0a36a3d2728d092f9943ace860205d340f220 100755 (executable)
@@ -39,7 +39,7 @@ valid_tool() {
 }
 
 init_browser_path() {
 }
 
 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
 }
 
        test -z "$browser_path" && browser_path=$1
 }
 
@@ -71,7 +71,7 @@ do
     shift
 done
 
     shift
 done
 
-if test -z "$browser" && test -n "$GIT_DIR"
+if test -z "$browser"
 then
     for opt in "help.browser" "web.browser"
     do
 then
     for opt in "help.browser" "web.browser"
     do
index b366761b976a136144c7483de5c883a084996816..270d559297259d8a94f7b5b25b87649d00139e84 100755 (executable)
@@ -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.
 
 # 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
 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}
        if [ -z "$SUBDIRECTORY_OK" ]
        then
                : ${GIT_DIR=.git}
diff --git a/help.c b/help.c
index c96b1670f33a97daef215ee691016a8bfa9555c9..551b5b93b37f49e53746cb628416ab34d1dd9bd5 100644 (file)
--- a/help.c
+++ b/help.c
@@ -8,6 +8,44 @@
 #include "exec_cmd.h"
 #include "common-cmds.h"
 
 #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)
 {
 /* 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);
        }
 
                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;
 }
 
        return 0;
 }