diff options
authorMike Dalessio <>2007-10-06 17:29:49 (GMT)
committerShawn O. Pearce <>2007-10-16 01:36:19 (GMT)
commit425b78e886e80f3c9f845edebfb199719a8f2d87 (patch)
parent14b45b66e7f75341040c9797af60fb9318c8b047 (diff)
instaweb: support for Ruby's WEBrick server
running the webrick server with git requires Ruby and Ruby's YAML and Webrick libraries (both of which come standard with Ruby). nice for single-user standalone invocations. the --httpd=webrick option generates a ruby script on the fly to read httpd.conf options and invoke the web server via library call. this script is placed in the .git/gitweb directory. it also generates a shell script in a feeble attempt to invoke ruby in a portable manner, which assumes that 'ruby' is in the user's $PATH. Signed-off-by: Mike Dalessio <> Signed-off-by: Lars Hjemli <> Signed-off-by: Shawn O. Pearce <>
2 files changed, 41 insertions, 1 deletions
diff --git a/Documentation/git-instaweb.txt b/Documentation/git-instaweb.txt
index cec60ee..735008c 100644
--- a/Documentation/git-instaweb.txt
+++ b/Documentation/git-instaweb.txt
@@ -27,7 +27,7 @@ OPTIONS
The HTTP daemon command-line that will be executed.
Command-line options may be specified here, and the
configuration file will be added at the end of the command-line.
- Currently, lighttpd and apache2 are the only supported servers.
+ Currently lighttpd, apache2 and webrick are supported.
(Default: lighttpd)
diff --git a/ b/
index 8eb7f3e..2e4eecc 100755
--- a/
+++ b/
@@ -139,6 +139,43 @@ GIT_DIR="$fqgitdir"
+webrick_conf () {
+ # generate a standalone server script in $fqgitdir/gitweb.
+ cat >"$fqgitdir/gitweb/$httpd.rb" <<EOF
+require 'webrick'
+require 'yaml'
+options = YAML::load_file(ARGV[0])
+options[:StartCallback] = proc do
+[:PidFile],"w") do |f|
+ f.puts
+ end
+options[:ServerType] = WEBrick::Daemon
+server =
+['INT', 'TERM'].each do |signal|
+ trap(signal) {server.shutdown}
+ # generate a shell script to invoke the above ruby script,
+ # 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
+exec ruby "$fqgitdir/gitweb/$httpd.rb" \$*
+ chmod +x "$fqgitdir/gitweb/$httpd"
+ cat >"$conf" <<EOF
+:Port: $port
+:DocumentRoot: "$fqgitdir/gitweb"
+:DirectoryIndex: ["gitweb.cgi"]
+:PidFile: "$fqgitdir/pid"
+ test "$local" = true && echo ':BindAddress: ""' >> "$conf"
lighttpd_conf () {
cat > "$conf" <<EOF
server.document-root = "$fqgitdir/gitweb"
@@ -239,6 +276,9 @@ case "$httpd" in
+ webrick_conf
+ ;;
echo "Unknown httpd specified: $httpd"
exit 1