Show 91 quoted lines
> ---
> Documentation/git-instaweb.txt | 3 +-
> git-instaweb.sh | 44 +++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 45 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/git-instaweb.txt b/Documentation/git-instaweb.txt
> index cec60ee..914fc4c 100644
> --- a/Documentation/git-instaweb.txt
> +++ b/Documentation/git-instaweb.txt
> @@ -27,7 +27,8 @@ 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 the only supported
> + servers.
> (Default: lighttpd)
>
> -m|--module-path::
> diff --git a/git-instaweb.sh b/git-instaweb.sh
> index b79c6b6..803a754 100755
> --- a/git-instaweb.sh
> +++ b/git-instaweb.sh
> @@ -37,7 +37,9 @@ start_httpd () {
> else
> # many httpds are installed in /usr/sbin or /usr/local/sbin
> # these days and those are not in most users $PATHs
> - for i in /usr/local/sbin /usr/sbin
> + # in addition, we may have generated a server script
> + # in $fqgitdir/gitweb.
> + for i in /usr/local/sbin /usr/sbin $fqgitdir/gitweb
> do
> if test -x "$i/$httpd_only"
> then
> @@ -137,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
> +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"
> @@ -237,6 +276,9 @@ case "$httpd" in
> *apache2*)
> apache2_conf
> ;;
> +webrick)
> + webrick_conf
> + ;;
> *)
> echo "Unknown httpd specified: $httpd"
> exit 1
> --
> 1.5.2.5
>