Merge branch 'cc/browser'

* cc/browser:
  Documentation: add 'git-web--browse.txt' and simplify other docs.
  git-web--browse: fix misplaced quote in init_browser_path()
  web--browse: Add a few quotes in 'init_browser_path'.
  Documentation: instaweb: add 'git-web--browse' information.
  Adjust .gitignore for 5884f1(Rename 'git-help--browse.sh'...)
  git-web--browse: do not start the browser with nohup
  instaweb: use 'git-web--browse' to launch browser.
  Rename 'git-help--browse.sh' to 'git-web--browse.sh'.
  help--browse: add '--config' option to check a config option for a browser.
  help: make 'git-help--browse' usable outside 'git-help'.

Conflicts:

	git-web--browse.sh
This commit is contained in:
Junio C Hamano 2008-02-16 17:57:47 -08:00
commit 990732609c
8 changed files with 143 additions and 66 deletions

2
.gitignore vendored
View File

@ -50,7 +50,6 @@ git-gc
git-get-tar-commit-id git-get-tar-commit-id
git-grep git-grep
git-hash-object git-hash-object
git-help--browse
git-http-fetch git-http-fetch
git-http-push git-http-push
git-imap-send git-imap-send
@ -136,6 +135,7 @@ git-upload-pack
git-var git-var
git-verify-pack git-verify-pack
git-verify-tag git-verify-tag
git-web--browse
git-whatchanged git-whatchanged
git-write-tree git-write-tree
git-core-*/?* git-core-*/?*

View File

@ -47,27 +47,9 @@ OPTIONS
+ +
The web browser can be specified using the configuration variable The web browser can be specified using the configuration variable
'help.browser', or 'web.browser' if the former is not set. If none of 'help.browser', or 'web.browser' if the former is not set. If none of
these config variables is set, the 'git-help--browse' helper script these config variables is set, the 'git-web--browse' helper script
(called by 'git-help') will pick a suitable default. (called by 'git-help') will pick a suitable default. See
+ linkgit:git-web--browse[1] for more information about this.
You can explicitly provide a full path to your preferred browser by
setting the configuration variable 'browser.<tool>.path'. For example,
you can configure the absolute path to firefox by setting
'browser.firefox.path'. Otherwise, 'git-help--browse' assumes the tool
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.
+
The following browsers are currently supported by 'git-help--browse':
+
* firefox (this is the default under X Window when not using KDE)
* iceweasel
* konqueror (this is the default under KDE)
* w3m (this is the default outside X Window)
* links
* lynx
* dillo
CONFIGURATION VARIABLES CONFIGURATION VARIABLES
----------------------- -----------------------
@ -84,7 +66,7 @@ line option:
The 'help.browser', 'web.browser' and 'browser.<tool>.path' will also The 'help.browser', 'web.browser' and 'browser.<tool>.path' will also
be checked if the 'web' format is chosen (either by command line be checked if the 'web' format is chosen (either by command line
option or configuration variable). See '-w|--web' in the OPTIONS option or configuration variable). See '-w|--web' in the OPTIONS
section above. section above and linkgit:git-web--browse[1].
Note that these configuration variables should probably be set using Note that these configuration variables should probably be set using
the '--global' flag, for example like this: the '--global' flag, for example like this:

View File

@ -38,10 +38,11 @@ OPTIONS
The port number to bind the httpd to. (Default: 1234) The port number to bind the httpd to. (Default: 1234)
-b|--browser:: -b|--browser::
The web browser that should be used to view the gitweb
The web browser command-line to execute to view the gitweb page. page. This will be passed to the 'git-web--browse' helper
If blank, the URL of the gitweb instance will be printed to script along with the URL of the gitweb instance. See
stdout. (Default: 'firefox') linkgit:git-web--browse[1] for more information about this. If
the script fails, the URL will be printed to stdout.
--start:: --start::
Start the httpd instance and exit. This does not generate Start the httpd instance and exit. This does not generate
@ -72,7 +73,8 @@ You may specify configuration in your .git/config
----------------------------------------------------------------------- -----------------------------------------------------------------------
If the configuration variable 'instaweb.browser' is not set, If the configuration variable 'instaweb.browser' is not set,
'web.browser' will be used instead if it is defined. 'web.browser' will be used instead if it is defined. See
linkgit:git-web--browse[1] for more information about this.
Author Author
------ ------

View File

@ -0,0 +1,78 @@
git-web--browse(1)
==================
NAME
----
git-web--browse - git helper script to launch a web browser
SYNOPSIS
--------
'git-web--browse' [OPTIONS] URL/FILE ...
DESCRIPTION
-----------
This script tries, as much as possible, to display the URLs and FILEs
that are passed as arguments, as HTML pages in new tabs on an already
opened web browser.
The following browsers (or commands) are currently supported:
* firefox (this is the default under X Window when not using KDE)
* iceweasel
* konqueror (this is the default under KDE)
* w3m (this is the default outside graphical environments)
* links
* lynx
* dillo
* open (this is the default under Mac OS X GUI)
OPTIONS
-------
-b BROWSER|--browser=BROWSER::
Use the specified BROWSER. It must be in the list of supported
browsers.
-t BROWSER|--tool=BROWSER::
Same as above.
-c CONF.VAR|--config=CONF.VAR::
CONF.VAR is looked up in the git config files. If it's set,
then its value specify the browser that should be used.
CONFIGURATION VARIABLES
-----------------------
The web browser can be specified using a configuration variable passed
with the -c (or --config) command line option, or the 'web.browser'
configuration variable if the former is not used.
You can explicitly provide a full path to your preferred browser by
setting the configuration variable 'browser.<tool>.path'. For example,
you can configure the absolute path to firefox by setting
'browser.firefox.path'. Otherwise, 'git-web--browse' assumes the tool
is available in PATH.
Note that these configuration variables should probably be set using
the '--global' flag, for example like this:
------------------------------------------------
$ git config --global web.browser firefox
------------------------------------------------
as they are probably more user specific than repository specific.
See linkgit:git-config[1] for more information about this.
Author
------
Written by Christian Couder <chriscool@tuxfamily.org> and the git-list
<git@vger.kernel.org>, based on git-mergetool by Theodore Y. Ts'o.
Documentation
-------------
Documentation by Christian Couder <chriscool@tuxfamily.org> and the
git-list <git@vger.kernel.org>.
GIT
---
Part of the linkgit:git[7] suite

View File

@ -231,7 +231,7 @@ SCRIPT_SH = \
git-lost-found.sh git-quiltimport.sh git-submodule.sh \ git-lost-found.sh git-quiltimport.sh git-submodule.sh \
git-filter-branch.sh \ git-filter-branch.sh \
git-stash.sh \ git-stash.sh \
git-help--browse.sh git-web--browse.sh
SCRIPT_PERL = \ SCRIPT_PERL = \
git-add--interactive.perl \ git-add--interactive.perl \
@ -819,6 +819,7 @@ git$X: git.o $(BUILTIN_OBJS) $(GITLIBS)
help.o: help.c common-cmds.h GIT-CFLAGS help.o: help.c common-cmds.h GIT-CFLAGS
$(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \ $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \
'-DGIT_HTML_PATH="$(htmldir_SQ)"' \
'-DGIT_MAN_PATH="$(mandir_SQ)"' \ '-DGIT_MAN_PATH="$(mandir_SQ)"' \
'-DGIT_INFO_PATH="$(infodir_SQ)"' $< '-DGIT_INFO_PATH="$(infodir_SQ)"' $<
@ -839,7 +840,6 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
-e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \ -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
-e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \ -e 's/@@GIT_VERSION@@/$(GIT_VERSION)/g' \
-e 's/@@NO_CURL@@/$(NO_CURL)/g' \ -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
-e 's|@@HTMLDIR@@|$(htmldir_SQ)|g' \
$@.sh >$@+ && \ $@.sh >$@+ && \
chmod +x $@+ && \ chmod +x $@+ && \
mv $@+ $@ mv $@+ $@

View File

@ -24,8 +24,6 @@ restart restart the web server
fqgitdir="$GIT_DIR" fqgitdir="$GIT_DIR"
local="`git config --bool --get instaweb.local`" local="`git config --bool --get instaweb.local`"
httpd="`git config --get instaweb.httpd`" httpd="`git config --get instaweb.httpd`"
browser="`git config --get instaweb.browser`"
test -z "$browser" && browser="`git config --get web.browser`"
port=`git config --get instaweb.port` port=`git config --get instaweb.port`
module_path="`git config --get instaweb.modulepath`" module_path="`git config --get instaweb.modulepath`"
@ -36,9 +34,6 @@ conf="$GIT_DIR/gitweb/httpd.conf"
# if installed, it doesn't need further configuration (module_path) # if installed, it doesn't need further configuration (module_path)
test -z "$httpd" && httpd='lighttpd -f' test -z "$httpd" && httpd='lighttpd -f'
# probably the most popular browser among gitweb users
test -z "$browser" && browser='firefox'
# any untaken local port will do... # any untaken local port will do...
test -z "$port" && port=1234 test -z "$port" && port=1234
@ -274,14 +269,11 @@ webrick)
;; ;;
esac esac
init_browser_path() {
browser_path="`git config browser.$1.path`"
test -z "$browser_path" && browser_path="$1"
}
start_httpd start_httpd
url=http://127.0.0.1:$port url=http://127.0.0.1:$port
test -n "$browser" && {
init_browser_path "$browser" if test -n "$browser"; then
"$browser_path" $url git web--browse -b "$browser" $url || echo $url
} || echo $url else
git web--browse -c "instaweb.browser" $url || echo $url
fi

View File

@ -16,18 +16,13 @@
# git maintainer. # git maintainer.
# #
USAGE='[--browser=browser|--tool=browser] [cmd to display] ...' USAGE='[--browser=browser|--tool=browser] [--config=conf.var] url/file ...'
# This must be capable of running outside of git directory, so # This must be capable of running outside of git directory, so
# the vanilla git-sh-setup should not be used. # the vanilla git-sh-setup should not be used.
NONGIT_OK=Yes NONGIT_OK=Yes
. git-sh-setup . git-sh-setup
# Install data.
html_dir="@@HTMLDIR@@"
test -f "$html_dir/git.html" || die "No documentation directory found."
valid_tool() { valid_tool() {
case "$1" in case "$1" in
firefox | iceweasel | konqueror | w3m | links | lynx | dillo | open) firefox | iceweasel | konqueror | w3m | links | lynx | dillo | open)
@ -39,8 +34,8 @@ valid_tool() {
} }
init_browser_path() { init_browser_path() {
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"
} }
while test $# != 0 while test $# != 0
@ -58,6 +53,18 @@ do
shift ;; shift ;;
esac esac
;; ;;
-c|--config*)
case "$#,$1" in
*,*=*)
conf=`expr "z$1" : 'z-[^=]*=\(.*\)'`
;;
1,*)
usage ;;
*)
conf="$2"
shift ;;
esac
;;
--) --)
break break
;; ;;
@ -71,17 +78,20 @@ do
shift shift
done done
test $# = 0 && usage
if test -z "$browser" if test -z "$browser"
then then
for opt in "help.browser" "web.browser" for opt in "$conf" "web.browser"
do do
test -z "$opt" && continue
browser="`git config $opt`" browser="`git config $opt`"
test -z "$browser" || break test -z "$browser" || break
done done
if test -n "$browser" && ! valid_tool "$browser"; then if test -n "$browser" && ! valid_tool "$browser"; then
echo >&2 "git config option $opt set to unknown browser: $browser" echo >&2 "git config option $opt set to unknown browser: $browser"
echo >&2 "Resetting to default..." echo >&2 "Resetting to default..."
unset browser unset browser
fi fi
fi fi
@ -117,16 +127,13 @@ else
fi fi
fi fi
pages=$(for p in "$@"; do echo "$html_dir/$p.html" ; done)
test -z "$pages" && pages="$html_dir/git.html"
case "$browser" in case "$browser" in
firefox|iceweasel) firefox|iceweasel)
# Check version because firefox < 2.0 does not support "-new-tab". # Check version because firefox < 2.0 does not support "-new-tab".
vers=$(expr "$($browser_path -version)" : '.* \([0-9][0-9]*\)\..*') vers=$(expr "$($browser_path -version)" : '.* \([0-9][0-9]*\)\..*')
NEWTAB='-new-tab' NEWTAB='-new-tab'
test "$vers" -lt 2 && NEWTAB='' test "$vers" -lt 2 && NEWTAB=''
nohup "$browser_path" $NEWTAB $pages & "$browser_path" $NEWTAB "$@" &
;; ;;
konqueror) konqueror)
case "$(basename "$browser_path")" in case "$(basename "$browser_path")" in
@ -134,20 +141,20 @@ case "$browser" in
# It's simpler to use kfmclient to open a new tab in konqueror. # It's simpler to use kfmclient to open a new tab in konqueror.
browser_path="$(echo "$browser_path" | sed -e 's/konqueror$/kfmclient/')" browser_path="$(echo "$browser_path" | sed -e 's/konqueror$/kfmclient/')"
type "$browser_path" > /dev/null 2>&1 || die "No '$browser_path' found." type "$browser_path" > /dev/null 2>&1 || die "No '$browser_path' found."
eval "$browser_path" newTab $pages eval "$browser_path" newTab "$@"
;; ;;
kfmclient) kfmclient)
eval "$browser_path" newTab $pages eval "$browser_path" newTab "$@"
;; ;;
*) *)
nohup "$browser_path" $pages & "$browser_path" "$@" &
;; ;;
esac esac
;; ;;
w3m|links|lynx|open) w3m|links|lynx|open)
eval "$browser_path" $pages eval "$browser_path" "$@"
;; ;;
dillo) dillo)
nohup "$browser_path" $pages & "$browser_path" "$@" &
;; ;;
esac esac

18
help.c
View File

@ -330,10 +330,26 @@ static void show_info_page(const char *git_cmd)
execlp("info", "info", "gitman", page, NULL); execlp("info", "info", "gitman", page, NULL);
} }
static void get_html_page_path(struct strbuf *page_path, const char *page)
{
struct stat st;
/* Check that we have a git documentation directory. */
if (stat(GIT_HTML_PATH "/git.html", &st) || !S_ISREG(st.st_mode))
die("'%s': not a documentation directory.", GIT_HTML_PATH);
strbuf_init(page_path, 0);
strbuf_addf(page_path, GIT_HTML_PATH "/%s.html", page);
}
static void show_html_page(const char *git_cmd) static void show_html_page(const char *git_cmd)
{ {
const char *page = cmd_to_page(git_cmd); const char *page = cmd_to_page(git_cmd);
execl_git_cmd("help--browse", page, NULL); struct strbuf page_path; /* it leaks but we exec bellow */
get_html_page_path(&page_path, page);
execl_git_cmd("web--browse", "-c", "help.browser", page_path.buf, NULL);
} }
void help_unknown_cmd(const char *cmd) void help_unknown_cmd(const char *cmd)