 be537e43ca
			
		
	
	be537e43ca
	
	
	
		
			
			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
 |