summaryrefslogtreecommitdiff
path: root/git-instaweb.sh
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-08-04 09:51:25 +0000
committerEric Wong <normalperson@yhbt.net>2010-08-05 08:51:26 +0000
commit422bff280297b55aff6542cc5df1c078f37ab673 (patch)
treee85de3ec3b96524fcc1ccdc0b30c31493340288e /git-instaweb.sh
parent721e76cbfac650ce676fc789b717eb21e1daa46e (diff)
downloadgit-422bff280297b55aff6542cc5df1c078f37ab673.tar.gz
instaweb: fix WEBrick server support
This has been broken since commit be5347b ("httpd logs in a "$httpd_only" subdirectory"). Since WEBrick has no other way of preserving environment variables needed for gitweb, we create a shell script wrapper that sets the environment variables as our CGI interpreter to run gitweb.cgi. Signed-off-by: Eric Wong <normalperson@yhbt.net>
Diffstat (limited to 'git-instaweb.sh')
-rwxr-xr-xgit-instaweb.sh29
1 files changed, 27 insertions, 2 deletions
diff --git a/git-instaweb.sh b/git-instaweb.sh
index b7342e22c8..5d4ddc8f58 100755
--- a/git-instaweb.sh
+++ b/git-instaweb.sh
@@ -57,6 +57,13 @@ resolve_full_httpd () {
httpd_only="${httpd%% *}" # cut on first space
return
;;
+ *webrick*)
+ # server is started by running via generated webrick.sh in
+ # $fqgitdir/gitweb
+ full_httpd="$fqgitdir/gitweb/webrick.sh"
+ httpd_only="${httpd%% *}" # cut on first space
+ return
+ ;;
esac
httpd_only="$(echo $httpd | cut -f1 -d' ')"
@@ -188,6 +195,23 @@ GITWEB_CONFIG="$fqgitdir/gitweb/gitweb_config.perl"
export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG
webrick_conf () {
+ # webrick seems to have no way of passing arbitrary environment
+ # variables to the underlying CGI executable, so we wrap the
+ # actual gitweb.cgi using a shell script to force it
+ wrapper="$fqgitdir/gitweb/$httpd/wrapper.sh"
+ cat > "$wrapper" <<EOF
+#!/bin/sh
+# we use this shell script wrapper around the real gitweb.cgi since
+# there appears to be no other way to pass arbitrary environment variables
+# into the CGI process
+GIT_EXEC_PATH=$GIT_EXEC_PATH GIT_DIR=$GIT_DIR GITWEB_CONFIG=$GITWEB_CONFIG
+export GIT_EXEC_PATH GIT_DIR GITWEB_CONFIG
+exec $root/gitweb.cgi
+EOF
+ chmod +x "$wrapper"
+
+ # This assumes _ruby_ is in the user's $PATH. that's _one_
+ # portable way to run ruby, which could be installed anywhere, really.
# generate a standalone server script in $fqgitdir/gitweb.
cat >"$fqgitdir/gitweb/$httpd.rb" <<EOF
require 'webrick'
@@ -209,17 +233,18 @@ EOF
# which assumes _ruby_ is in the user's $PATH. that's _one_
# portable way to run ruby, which could be installed anywhere,
# really.
- cat >"$fqgitdir/gitweb/$httpd" <<EOF
+ cat >"$fqgitdir/gitweb/$httpd.sh" <<EOF
#!/bin/sh
exec ruby "$fqgitdir/gitweb/$httpd.rb" \$*
EOF
- chmod +x "$fqgitdir/gitweb/$httpd"
+ chmod +x "$fqgitdir/gitweb/$httpd.sh"
cat >"$conf" <<EOF
:Port: $port
:DocumentRoot: "$root"
:DirectoryIndex: ["gitweb.cgi"]
:PidFile: "$fqgitdir/pid"
+:CGIInterpreter: "$wrapper"
EOF
test "$local" = true && echo ':BindAddress: "127.0.0.1"' >> "$conf"
}