You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
4.3 KiB
196 lines
4.3 KiB
#!/bin/sh |
|
# |
|
# This program launch a web browser on the html page |
|
# describing a git command. |
|
# |
|
# Copyright (c) 2007 Christian Couder |
|
# Copyright (c) 2006 Theodore Y. Ts'o |
|
# |
|
# This file is heavily stolen from git-mergetool.sh, by |
|
# Theodore Y. Ts'o (thanks) that is: |
|
# |
|
# Copyright (c) 2006 Theodore Y. Ts'o |
|
# |
|
# This file is licensed under the GPL v2, or a later version |
|
# at the discretion of Junio C Hamano or any other official |
|
# git maintainer. |
|
# |
|
|
|
USAGE='[--browser=browser|--tool=browser] [--config=conf.var] url/file ...' |
|
|
|
# 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 |
|
|
|
valid_custom_tool() |
|
{ |
|
browser_cmd="$(git config "browser.$1.cmd")" |
|
test -n "$browser_cmd" |
|
} |
|
|
|
valid_tool() { |
|
case "$1" in |
|
firefox | iceweasel | seamonkey | iceape | \ |
|
chrome | google-chrome | chromium | chromium-browser | \ |
|
konqueror | opera | w3m | elinks | links | lynx | dillo | open | \ |
|
start | cygstart) |
|
;; # happy |
|
*) |
|
valid_custom_tool "$1" || return 1 |
|
;; |
|
esac |
|
} |
|
|
|
init_browser_path() { |
|
browser_path=$(git config "browser.$1.path") |
|
if test -z "$browser_path" && |
|
test "$1" = chromium && |
|
type chromium-browser >/dev/null 2>&1 |
|
then |
|
browser_path=chromium-browser |
|
fi |
|
: ${browser_path:="$1"} |
|
} |
|
|
|
while test $# != 0 |
|
do |
|
case "$1" in |
|
-b|--browser*|-t|--tool*) |
|
case "$#,$1" in |
|
*,*=*) |
|
browser=`expr "z$1" : 'z-[^=]*=\(.*\)'` |
|
;; |
|
1,*) |
|
usage ;; |
|
*) |
|
browser="$2" |
|
shift ;; |
|
esac |
|
;; |
|
-c|--config*) |
|
case "$#,$1" in |
|
*,*=*) |
|
conf=`expr "z$1" : 'z-[^=]*=\(.*\)'` |
|
;; |
|
1,*) |
|
usage ;; |
|
*) |
|
conf="$2" |
|
shift ;; |
|
esac |
|
;; |
|
--) |
|
break |
|
;; |
|
-*) |
|
usage |
|
;; |
|
*) |
|
break |
|
;; |
|
esac |
|
shift |
|
done |
|
|
|
test $# = 0 && usage |
|
|
|
if test -z "$browser" |
|
then |
|
for opt in "$conf" "web.browser" |
|
do |
|
test -z "$opt" && continue |
|
browser="`git config $opt`" |
|
test -z "$browser" || break |
|
done |
|
if test -n "$browser" && ! valid_tool "$browser"; then |
|
echo >&2 "git config option $opt set to unknown browser: $browser" |
|
echo >&2 "Resetting to default..." |
|
unset browser |
|
fi |
|
fi |
|
|
|
if test -z "$browser" ; then |
|
if test -n "$DISPLAY"; then |
|
browser_candidates="firefox iceweasel google-chrome chrome chromium chromium-browser konqueror opera seamonkey iceape w3m elinks links lynx dillo" |
|
if test "$KDE_FULL_SESSION" = "true"; then |
|
browser_candidates="konqueror $browser_candidates" |
|
fi |
|
else |
|
browser_candidates="w3m elinks links lynx" |
|
fi |
|
# SECURITYSESSIONID indicates an OS X GUI login session |
|
if test -n "$SECURITYSESSIONID" || test -n "$TERM_PROGRAM" |
|
then |
|
browser_candidates="open $browser_candidates" |
|
fi |
|
# /bin/start indicates MinGW |
|
if test -x /bin/start; then |
|
browser_candidates="start $browser_candidates" |
|
fi |
|
# /usr/bin/cygstart indicates Cygwin |
|
if test -x /usr/bin/cygstart; then |
|
browser_candidates="cygstart $browser_candidates" |
|
fi |
|
|
|
for i in $browser_candidates; do |
|
init_browser_path $i |
|
if type "$browser_path" > /dev/null 2>&1; then |
|
browser=$i |
|
break |
|
fi |
|
done |
|
test -z "$browser" && die "No known browser available." |
|
else |
|
valid_tool "$browser" || die "Unknown browser '$browser'." |
|
|
|
init_browser_path "$browser" |
|
|
|
if test -z "$browser_cmd" && ! type "$browser_path" > /dev/null 2>&1; then |
|
die "The browser $browser is not available as '$browser_path'." |
|
fi |
|
fi |
|
|
|
case "$browser" in |
|
firefox|iceweasel|seamonkey|iceape) |
|
# Check version because firefox < 2.0 does not support "-new-tab". |
|
vers=$(expr "$($browser_path -version)" : '.* \([0-9][0-9]*\)\..*') |
|
NEWTAB='-new-tab' |
|
test "$vers" -lt 2 && NEWTAB='' |
|
"$browser_path" $NEWTAB "$@" & |
|
;; |
|
google-chrome|chrome|chromium|chromium-browser) |
|
# No need to specify newTab. It's default in chromium |
|
"$browser_path" "$@" & |
|
;; |
|
konqueror) |
|
case "$(basename "$browser_path")" 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/')" |
|
type "$browser_path" > /dev/null 2>&1 || die "No '$browser_path' found." |
|
"$browser_path" newTab "$@" & |
|
;; |
|
kfmclient) |
|
"$browser_path" newTab "$@" & |
|
;; |
|
*) |
|
"$browser_path" "$@" & |
|
;; |
|
esac |
|
;; |
|
w3m|elinks|links|lynx|open|cygstart) |
|
"$browser_path" "$@" |
|
;; |
|
start) |
|
exec "$browser_path" '"web-browse"' "$@" |
|
;; |
|
opera|dillo) |
|
"$browser_path" "$@" & |
|
;; |
|
*) |
|
if test -n "$browser_cmd"; then |
|
( eval "$browser_cmd \"\$@\"" ) |
|
fi |
|
;; |
|
esac
|
|
|