i18n: do not overuse C_LOCALE_OUTPUT (grep)
[gitweb.git] / git-instaweb.sh
index 5d4ddc8f583c460a0c9a11d0167e4bd6318c7e56..8bfa8a055ccd0c344d595f112b571bb3d6e21c28 100755 (executable)
@@ -58,9 +58,9 @@ resolve_full_httpd () {
                return
                ;;
        *webrick*)
-               # server is started by running via generated webrick.sh in
+               # server is started by running via generated webrick.rb in
                # $fqgitdir/gitweb
-               full_httpd="$fqgitdir/gitweb/webrick.sh"
+               full_httpd="$fqgitdir/gitweb/webrick.rb"
                httpd_only="${httpd%% *}" # cut on first space
                return
                ;;
@@ -214,39 +214,34 @@ EOF
        # 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
+#!/usr/bin/env ruby
 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
+require 'logger'
+options = {
+  :Port => $port,
+  :DocumentRoot => "$root",
+  :Logger => Logger.new('$fqgitdir/gitweb/error.log'),
+  :AccessLog => [
+    [ Logger.new('$fqgitdir/gitweb/access.log'),
+      WEBrick::AccessLog::COMBINED_LOG_FORMAT ]
+  ],
+  :DirectoryIndex => ["gitweb.cgi"],
+  :CGIInterpreter => "$wrapper",
+  :StartCallback => lambda do
+    File.open("$fqgitdir/pid", "w") { |f| f.puts Process.pid }
+  end,
+  :ServerType => WEBrick::Daemon,
+}
+options[:BindAddress] = '127.0.0.1' if "$local" == "true"
 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.sh" <<EOF
-#!/bin/sh
-exec ruby "$fqgitdir/gitweb/$httpd.rb" \$*
-EOF
-       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"
+       chmod +x "$fqgitdir/gitweb/$httpd.rb"
+       # configuration is embedded in server script file, webrick.rb
+       rm -f "$conf"
 }
 
 lighttpd_conf () {
@@ -563,12 +558,14 @@ my \$app = builder {
 
 # make it runnable as standalone app,
 # like it would be run via 'plackup' utility
-if (__FILE__ eq \$0) {
+if (caller) {
+       return \$app;
+} else {
        require Plack::Runner;
 
        my \$runner = Plack::Runner->new();
        \$runner->parse_options(qw(--env deployment --port $port),
-                              "$local" ? qw(--host 127.0.0.1) : ());
+                               "$local" ? qw(--host 127.0.0.1) : ());
        \$runner->run(\$app);
 }
 __END__
@@ -585,6 +582,8 @@ gitweb_conf() {
 our \$projectroot = "$(dirname "$fqgitdir")";
 our \$git_temp = "$fqgitdir/gitweb/tmp";
 our \$projects_list = \$projectroot;
+
+\$feature{'remote_heads'}{'default'} = [1];
 EOF
 }