#!/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. # setvar 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. setvar NONGIT_OK = 'Yes' source git-sh-setup proc valid_custom_tool { setvar browser_cmd = "$(git config "browser.$1.cmd")" test -n $browser_cmd } proc valid_tool { case (1) { firefox | iceweasel | seamonkey | iceape | \ chrome | google-chrome | chromium | chromium-browser | \ konqueror | opera | w3m | elinks | links | lynx | dillo | open | \ start | cygstart | xdg-open { } # happy * { valid_custom_tool $1 || return 1 } } } proc init_browser_path { setvar browser_path = $(git config "browser.$1.path") if test -z $browser_path && test $1 = chromium && type chromium-browser >/dev/null 2>&1 { setvar browser_path = 'chromium-browser' } : ${browser_path:="$1"} } while test $# != 0 { case (1) { -b|--browser*|-t|--tool* { case{ *,*=* { setvar browser = $(expr "z$1" : 'z-[^=]*=\(.*\)') } 1,* { usage } * { setvar browser = "$2" shift } } } -c|--config* { case{ *,*=* { setvar conf = $(expr "z$1" : 'z-[^=]*=\(.*\)') } 1,* { usage } * { setvar conf = "$2" shift } } } -- { break } -* { usage } * { break } } shift } test $Argc = 0 && usage if test -z $browser { for opt in "$conf" "web.browser" { test -z $opt && continue setvar browser = "$(git config $opt)" test -z $browser || break } if test -n $browser && ! valid_tool $browser { echo >&2 "git config option $opt set to unknown browser: $browser>&2 "git config option $opt set to unknown browser: $browser" echo >&2 "Resetting to default...>&2 "Resetting to default..." unset browser } } if test -z $browser { if test -n $DISPLAY { setvar browser_candidates = ""firefox iceweasel google-chrome chrome chromium chromium-browser konqueror opera seamonkey iceape w3m elinks links lynx dillo xdg-open"" if test $KDE_FULL_SESSION = "true" { setvar browser_candidates = ""konqueror $browser_candidates"" } } else { setvar browser_candidates = ""w3m elinks links lynx"" } # SECURITYSESSIONID indicates an OS X GUI login session if test -n $SECURITYSESSIONID || test -n $TERM_PROGRAM { setvar browser_candidates = ""open $browser_candidates"" } # /bin/start indicates MinGW if test -x /bin/start { setvar browser_candidates = ""start $browser_candidates"" } # /usr/bin/cygstart indicates Cygwin if test -x /usr/bin/cygstart { setvar browser_candidates = ""cygstart $browser_candidates"" } for i in $browser_candidates { init_browser_path $i if type $browser_path > /dev/null 2>&1 { setvar browser = "$i" break } } 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 { die "The browser $browser is not available as '$browser_path'." } } case (browser) { firefox|iceweasel|seamonkey|iceape { # Check version because firefox < 2.0 does not support "-new-tab". setvar vers = $(expr "$($browser_path -version)" : '.* \([0-9][0-9]*\)\..*') setvar NEWTAB = ''-new-tab'' test $vers -lt 2 && setvar NEWTAB = '''' $browser_path $NEWTAB @ARGV & } google-chrome|chrome|chromium|chromium-browser { # No need to specify newTab. It's default in chromium $browser_path @ARGV & } konqueror { case{ konqueror { # It's simpler to use kfmclient to open a new tab in konqueror. setvar 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 @ARGV & } kfmclient { $browser_path newTab @ARGV & } * { $browser_path @ARGV & } } } w3m|elinks|links|lynx|open|cygstart|xdg-open { $browser_path @ARGV } start { exec $browser_path '"web-browse"' @ARGV } opera|dillo { $browser_path @ARGV & } * { if test -n $browser_cmd { shell { eval "$browser_cmd \"\$@\"" } } } }