Skip to content

Commit

Permalink
instaweb: support for Ruby's WEBrick server
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Mike Dalessio authored and Shawn O. Pearce committed Oct 16, 2007
1 parent 14b45b6 commit 425b78e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Documentation/git-instaweb.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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::
Expand Down
40 changes: 40 additions & 0 deletions git-instaweb.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -239,6 +276,9 @@ case "$httpd" in
*apache2*)
apache2_conf
;;
webrick)
webrick_conf
;;
*)
echo "Unknown httpd specified: $httpd"
exit 1
Expand Down

0 comments on commit 425b78e

Please sign in to comment.