* [PATCH 1/2] git-help: add "help.format" config variable.
@ 2007-12-12 5:33 Christian Couder
2007-12-12 9:04 ` Junio C Hamano
0 siblings, 1 reply; 4+ messages in thread
From: Christian Couder @ 2007-12-12 5:33 UTC (permalink / raw)
To: Junio Hamano; +Cc: git
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".
By the way, this patch also adds -m|--man command line option to
use "man" even if something else is set in the "help.format"
config variable.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
Documentation/git-help.txt | 13 ++++++++-
git.c | 2 +-
help.c | 61 ++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 72 insertions(+), 4 deletions(-)
diff --git a/Documentation/git-help.txt b/Documentation/git-help.txt
index ac9e15d..af5e5cb 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
-----------
@@ -23,6 +23,12 @@ 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.
+If no command line option is passed, the 'help.format' configuration
+variable will be checked. Supported values for this variable are
+"man", "info" and "web" (or "html" as a synonym to the latter). This
+makes git-help behave as if a command line option with the same long
+name as been passed to it.
+
Note that 'git --help ...' is identical as 'git help ...' because the
former is internally converted into the latter.
@@ -36,6 +42,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.
diff --git a/git.c b/git.c
index 4f9876e..d46b63d 100644
--- a/git.c
+++ b/git.c
@@ -324,7 +324,7 @@ static void handle_internal_command(int argc, const char **argv)
{ "gc", cmd_gc, RUN_SETUP },
{ "get-tar-commit-id", cmd_get_tar_commit_id },
{ "grep", cmd_grep, RUN_SETUP | USE_PAGER },
- { "help", cmd_help },
+ { "help", cmd_help, RUN_SETUP },
#ifndef NO_CURL
{ "http-fetch", cmd_http_fetch, RUN_SETUP },
#endif
diff --git a/help.c b/help.c
index c96b167..af0a433 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,27 @@ 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 {
+ 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;
}
--
1.5.3.7.2270.g786cf-dirty
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] git-help: add "help.format" config variable.
2007-12-12 5:33 [PATCH 1/2] git-help: add "help.format" config variable Christian Couder
@ 2007-12-12 9:04 ` Junio C Hamano
2007-12-13 1:41 ` Junio C Hamano
0 siblings, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2007-12-12 9:04 UTC (permalink / raw)
To: Christian Couder; +Cc: git
Christian Couder <chriscool@tuxfamily.org> writes:
> diff --git a/git.c b/git.c
> index 4f9876e..d46b63d 100644
> --- a/git.c
> +++ b/git.c
> @@ -324,7 +324,7 @@ static void handle_internal_command(int argc, const char **argv)
> { "gc", cmd_gc, RUN_SETUP },
> { "get-tar-commit-id", cmd_get_tar_commit_id },
> { "grep", cmd_grep, RUN_SETUP | USE_PAGER },
> - { "help", cmd_help },
> + { "help", cmd_help, RUN_SETUP },
> #ifndef NO_CURL
> { "http-fetch", cmd_http_fetch, RUN_SETUP },
> #endif
It would be _NICE_ if we read configuration when we are in a git
repository, but I am afraid this change is unnice -- the users used to
be able to say "git help" from anywhere didn't they? Now they will get
"Not a git repository". It needs to do an optional repository
discovery, not a mandatory one RUN_SETUP causes.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] git-help: add "help.format" config variable.
2007-12-12 9:04 ` Junio C Hamano
@ 2007-12-13 1:41 ` Junio C Hamano
2007-12-15 4:57 ` Christian Couder
0 siblings, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2007-12-13 1:41 UTC (permalink / raw)
To: Christian Couder; +Cc: git
Junio C Hamano <gitster@pobox.com> writes:
> Christian Couder <chriscool@tuxfamily.org> writes:
>
>> diff --git a/git.c b/git.c
>> index 4f9876e..d46b63d 100644
>> --- a/git.c
>> +++ b/git.c
>> @@ -324,7 +324,7 @@ static void handle_internal_command(int argc, const char **argv)
>> { "gc", cmd_gc, RUN_SETUP },
>> { "get-tar-commit-id", cmd_get_tar_commit_id },
>> { "grep", cmd_grep, RUN_SETUP | USE_PAGER },
>> - { "help", cmd_help },
>> + { "help", cmd_help, RUN_SETUP },
>> #ifndef NO_CURL
>> { "http-fetch", cmd_http_fetch, RUN_SETUP },
>> #endif
>
> It would be _NICE_ if we read configuration when we are in a git
> repository, but I am afraid this change is unnice -- the users used to
> be able to say "git help" from anywhere didn't they? Now they will get
> "Not a git repository". It needs to do an optional repository
> discovery, not a mandatory one RUN_SETUP causes.
It turns out that the earlier git-browse-help is already broken with
respect to this.
-- >8 --
[PATCH] git-help -w: do not require to be in git repository
The users used to be able to say "git help cat-file" from anywhere, but
the browse-help script insisted to be in a git repository, which caused
"git help -w cat-file" to barf outside. Correct it.
While at it, remove leftover debugging "echo".
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
git-browse-help.sh | 13 ++++++++-----
git-sh-setup.sh | 45 ++++++++++++++++++++++++++-------------------
2 files changed, 34 insertions(+), 24 deletions(-)
diff --git a/git-browse-help.sh b/git-browse-help.sh
index 817b379..b465911 100755
--- a/git-browse-help.sh
+++ b/git-browse-help.sh
@@ -17,8 +17,10 @@
#
USAGE='[--browser=browser|--tool=browser] [cmd to display] ...'
-SUBDIRECTORY_OK=Yes
-OPTIONS_SPEC=
+
+# This must be capable of running outside of git directory, so
+# the vanilla git-sh-setup should not be used.
+NONGIT_OK=Yes
. git-sh-setup
# Install data.
@@ -37,7 +39,7 @@ valid_tool() {
}
init_browser_path() {
- browser_path=`git config browser.$1.path`
+ test -z "$GIT_DIR" || browser_path=`git config browser.$1.path`
test -z "$browser_path" && browser_path=$1
}
@@ -69,7 +71,8 @@ do
shift
done
-if test -z "$browser"; then
+if test -z "$browser" && test -n "$GIT_DIR"
+then
for opt in "help.browser" "web.browser"
do
browser="`git config $opt`"
@@ -91,7 +94,7 @@ if test -z "$browser" ; then
else
browser_candidates="w3m links lynx"
fi
- echo "browser candidates: $browser_candidates"
+
for i in $browser_candidates; do
init_browser_path $i
if type "$browser_path" > /dev/null 2>&1; then
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index 5aa62dd..b366761 100755
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -122,26 +122,33 @@ get_author_ident_from_commit () {
LANG=C LC_ALL=C sed -ne "$pick_author_script"
}
-# Make sure we are in a valid repository of a vintage we understand.
-if [ -z "$SUBDIRECTORY_OK" ]
+# 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"
then
- : ${GIT_DIR=.git}
- test -z "$(git rev-parse --show-cdup)" || {
- exit=$?
- echo >&2 "You need to run this command from the toplevel of the working tree."
- exit $exit
- }
+ if git rev-parse --git-dir >/dev/null 2>&1
+ then
+ : ${GIT_DIR=.git}
+ fi
else
- GIT_DIR=$(git rev-parse --git-dir) || {
- exit=$?
- echo >&2 "Failed to find a valid git directory."
- exit $exit
+ if [ -z "$SUBDIRECTORY_OK" ]
+ then
+ : ${GIT_DIR=.git}
+ test -z "$(git rev-parse --show-cdup)" || {
+ exit=$?
+ echo >&2 "You need to run this command from the toplevel of the working tree."
+ exit $exit
+ }
+ else
+ GIT_DIR=$(git rev-parse --git-dir) || {
+ exit=$?
+ echo >&2 "Failed to find a valid git directory."
+ exit $exit
+ }
+ fi
+ test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd) || {
+ echo >&2 "Unable to determine absolute path of git directory"
+ exit 1
}
+ : ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
fi
-
-test -n "$GIT_DIR" && GIT_DIR=$(cd "$GIT_DIR" && pwd) || {
- echo >&2 "Unable to determine absolute path of git directory"
- exit 1
-}
-
-: ${GIT_OBJECT_DIRECTORY="$GIT_DIR/objects"}
--
1.5.3.7-1170-g8d08
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] git-help: add "help.format" config variable.
2007-12-13 1:41 ` Junio C Hamano
@ 2007-12-15 4:57 ` Christian Couder
0 siblings, 0 replies; 4+ messages in thread
From: Christian Couder @ 2007-12-15 4:57 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Le jeudi 13 décembre 2007, Junio C Hamano a écrit :
> Junio C Hamano <gitster@pobox.com> writes:
> > Christian Couder <chriscool@tuxfamily.org> writes:
> >> diff --git a/git.c b/git.c
> >> index 4f9876e..d46b63d 100644
> >> --- a/git.c
> >> +++ b/git.c
> >> @@ -324,7 +324,7 @@ static void handle_internal_command(int argc,
> >> const char **argv) { "gc", cmd_gc, RUN_SETUP },
> >> { "get-tar-commit-id", cmd_get_tar_commit_id },
> >> { "grep", cmd_grep, RUN_SETUP | USE_PAGER },
> >> - { "help", cmd_help },
> >> + { "help", cmd_help, RUN_SETUP },
> >> #ifndef NO_CURL
> >> { "http-fetch", cmd_http_fetch, RUN_SETUP },
> >> #endif
> >
> > It would be _NICE_ if we read configuration when we are in a git
> > repository, but I am afraid this change is unnice -- the users used to
> > be able to say "git help" from anywhere didn't they? Now they will get
> > "Not a git repository". It needs to do an optional repository
> > discovery, not a mandatory one RUN_SETUP causes.
>
> It turns out that the earlier git-browse-help is already broken with
> respect to this.
You are right, I did not test outside a git repository.
I reworked the patch and will send it after this email.
While testing my new patch it seemed to me that some of your changes in the
patch quoted below prevent some configuration variables to be used when
they are set in the "global" config file (~/.gitconfig). So I reverted them
in my new patch. But thanks to your other changes, it seems to work fine
now.
> -- >8 --
> [PATCH] git-help -w: do not require to be in git repository
[...]
> @@ -37,7 +39,7 @@ valid_tool() {
> }
>
> init_browser_path() {
> - browser_path=`git config browser.$1.path`
> + test -z "$GIT_DIR" || browser_path=`git config browser.$1.path`
> test -z "$browser_path" && browser_path=$1
> }
This seems to prevent using global configuration when outside a git repo.
> @@ -69,7 +71,8 @@ do
> shift
> done
>
> -if test -z "$browser"; then
> +if test -z "$browser" && test -n "$GIT_DIR"
> +then
> for opt in "help.browser" "web.browser"
> do
> browser="`git config $opt`"
This also.
Thanks,
Christian.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-12-15 4:51 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-12 5:33 [PATCH 1/2] git-help: add "help.format" config variable Christian Couder
2007-12-12 9:04 ` Junio C Hamano
2007-12-13 1:41 ` Junio C Hamano
2007-12-15 4:57 ` Christian Couder
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).