mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![John Szakmeister](/assets/img/avatar_default.png)
It turns out that the presence of SECURITYSESSIONID is not sufficient for detecting the presence of a GUI under Mac OS X. SECURITYSESSIONID appears to only be set when the user has Screen Sharing enabled. Disabling Screen Sharing and relaunching the shell showed that the variable was missing, at least under Mac OS X 10.6.8. On the other hand, TERM_PROGRAM seems to be set for any terminals on OS X, so just check it is set to something, instead of hardcoding "Apple_Terminal" and missing other terminals such as iTerm.app. Signed-off-by: John Szakmeister <john@szakmeister.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
192 lines
4.1 KiB
Bash
Executable file
192 lines
4.1 KiB
Bash
Executable file
#!/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)
|
|
;; # 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
|
|
|
|
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)
|
|
"$browser_path" "$@"
|
|
;;
|
|
start)
|
|
exec "$browser_path" '"web-browse"' "$@"
|
|
;;
|
|
opera|dillo)
|
|
"$browser_path" "$@" &
|
|
;;
|
|
*)
|
|
if test -n "$browser_cmd"; then
|
|
( eval "$browser_cmd \"\$@\"" )
|
|
fi
|
|
;;
|
|
esac
|