diff options
author | Mike Dalessio <mike@csa.net> | 2007-10-06 13:29:49 -0400 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-10-15 21:36:19 -0400 |
commit | 425b78e886e80f3c9f845edebfb199719a8f2d87 (patch) | |
tree | 3157627a2346cd09abd540492a2c74d9243a1413 | |
parent | 14b45b66e7f75341040c9797af60fb9318c8b047 (diff) | |
download | git-425b78e886e80f3c9f845edebfb199719a8f2d87.tar.gz |
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 <mike@csa.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r-- | Documentation/git-instaweb.txt | 2 | ||||
-rwxr-xr-x | git-instaweb.sh | 40 |
2 files changed, 41 insertions, 1 deletions
diff --git a/Documentation/git-instaweb.txt b/Documentation/git-instaweb.txt index cec60ee780..735008c1ab 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) -m|--module-path:: diff --git a/git-instaweb.sh b/git-instaweb.sh index 8eb7f3ed1a..2e4eeccace 100755 --- a/git-instaweb.sh +++ b/git-instaweb.sh @@ -139,6 +139,43 @@ GIT_DIR="$fqgitdir" export GIT_EXEC_PATH GIT_DIR +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 + File.open(options[:PidFile],"w") do |f| + f.puts Process.pid + end +end +options[:ServerType] = WEBrick::Daemon +server = WEBrick::HTTPServer.new(options) +['INT', 'TERM'].each do |signal| + trap(signal) {server.shutdown} +end +server.start +EOF + # 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 +#!/bin/sh +exec ruby "$fqgitdir/gitweb/$httpd.rb" \$* +EOF + chmod +x "$fqgitdir/gitweb/$httpd" + + cat >"$conf" <<EOF +:Port: $port +:DocumentRoot: "$fqgitdir/gitweb" +:DirectoryIndex: ["gitweb.cgi"] +:PidFile: "$fqgitdir/pid" +EOF + test "$local" = true && echo ':BindAddress: "127.0.0.1"' >> "$conf" +} + lighttpd_conf () { cat > "$conf" <<EOF server.document-root = "$fqgitdir/gitweb" @@ -239,6 +276,9 @@ case "$httpd" in *apache2*) apache2_conf ;; +webrick) + webrick_conf + ;; *) echo "Unknown httpd specified: $httpd" exit 1 |