filter-branch: add git_commit_non_empty_tree and --prune-empty.
[gitweb.git] / git-web--browse.sh
index 2c51f361d17064ef9daeb6168bef9adf91cc0e4b..78d236b77f6e2b52d89bf7b579762723ede86d15 100755 (executable)
@@ -23,19 +23,25 @@ USAGE='[--browser=browser|--tool=browser] [--config=conf.var] url/file ...'
 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 | konqueror | w3m | links | lynx | dillo)
+               firefox | iceweasel | konqueror | w3m | links | lynx | dillo | open | start)
                        ;; # happy
                *)
-                       return 1
+                       valid_custom_tool "$1" || return 1
                        ;;
        esac
 }
 
 init_browser_path() {
-       browser_path=`git config browser.$1.path`
-       test -z "$browser_path" && browser_path=$1
+       browser_path=$(git config "browser.$1.path")
+       test -z "$browser_path" && browser_path="$1"
 }
 
 while test $# != 0
@@ -104,6 +110,14 @@ if test -z "$browser" ; then
     else
        browser_candidates="w3m links lynx"
     fi
+    # SECURITYSESSIONID indicates an OS X GUI login session
+    if test -n "$SECURITYSESSIONID"; then
+       browser_candidates="open $browser_candidates"
+    fi
+    # /bin/start indicates MinGW
+    if test -n /bin/start; then
+       browser_candidates="start $browser_candidates"
+    fi
 
     for i in $browser_candidates; do
        init_browser_path $i
@@ -118,7 +132,7 @@ else
 
     init_browser_path "$browser"
 
-    if ! type "$browser_path" > /dev/null 2>&1; then
+    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
@@ -147,10 +161,15 @@ case "$browser" in
                ;;
        esac
        ;;
-    w3m|links|lynx)
+    w3m|links|lynx|open|start)
        eval "$browser_path" "$@"
        ;;
     dillo)
        "$browser_path" "$@" &
        ;;
+    *)
+       if test -n "$browser_cmd"; then
+           ( eval $browser_cmd "$@" )
+       fi
+       ;;
 esac