All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] instaweb: added support Ruby's WEBrick server
@ 2007-09-18 12:16 mike dalessio
  2007-09-18 20:40 ` Eric Wong
  2007-09-18 23:15 ` Junio C Hamano
  0 siblings, 2 replies; 8+ messages in thread
From: mike dalessio @ 2007-09-18 12:16 UTC (permalink / raw)
  To: git, mike, normalperson

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>
---
 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

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] instaweb: added support Ruby's WEBrick server
  2007-09-18 12:16 [PATCH] instaweb: added support Ruby's WEBrick server mike dalessio
@ 2007-09-18 20:40 ` Eric Wong
  2007-09-18 23:15 ` Junio C Hamano
  1 sibling, 0 replies; 8+ messages in thread
From: Eric Wong @ 2007-09-18 20:40 UTC (permalink / raw)
  To: mike dalessio; +Cc: git

mike dalessio <mike@csa.net> wrote:
> 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>

Acked-by: Eric Wong <normalperson@yhbt.net>

> ---
>  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
> 

-- 
Eric Wong

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] instaweb: added support Ruby's WEBrick server
  2007-09-18 12:16 [PATCH] instaweb: added support Ruby's WEBrick server mike dalessio
  2007-09-18 20:40 ` Eric Wong
@ 2007-09-18 23:15 ` Junio C Hamano
  2007-09-19  0:41   ` David Symonds
                     ` (2 more replies)
  1 sibling, 3 replies; 8+ messages in thread
From: Junio C Hamano @ 2007-09-18 23:15 UTC (permalink / raw)
  To: mike dalessio; +Cc: git, normalperson

mike@csa.net (mike dalessio) writes:

> 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)

Perhaps we can start thinking about rewording "are the only
suported servers" to "are supported".

> 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

I do not think this hunk belongs to this patch.  It alone would
be a useful addition to the program even without the rest of
your patch, wouldn't it?  Imagine a case where I automatically
would reject all patches that have "Ruby" in it for some unknown
reason.  Do we want to drop this hunk in such a case?

> +	# 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.

No games with env, type, nor which.  Good.

Just a few style things (-) and one concern (+):

> +	cat > "$fqgitdir/gitweb/$httpd" <<EOF
> +#! /bin/sh
> +ruby $fqgitdir/gitweb/$httpd.rb \$*
> +EOF

 - I do not like extra whitespace between she-bang #! and the
   path.  Looks very ugly.

 - I do not like extra whitespace between redirection > and
   redirected filename either.  Looks very ugly.

 - I prefer such wrapper to exec the command, like this:

	#!/bin/sh
        exec ruby ...

 + fqgitdir and httpd need to be shell quoted.  I do not think
   anybody is stupid enough to have his GIT_DIR set to something
   like "/opt/funny/; rm -f / nuke-me/.git/" but you would see
   spaces and single quotes in pathnames in odd environments.

I wonder how popular instaweb is and how widely it is used.
I've actually wondering if we should demote it to contrib/
somewhere, but it gets occasional updates so people must be
using it...

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] instaweb: added support Ruby's WEBrick server
  2007-09-18 23:15 ` Junio C Hamano
@ 2007-09-19  0:41   ` David Symonds
  2007-09-19  1:27   ` Johannes Schindelin
  2007-10-06 17:29     ` mike
  2 siblings, 0 replies; 8+ messages in thread
From: David Symonds @ 2007-09-19  0:41 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: mike dalessio, git, normalperson

On 19/09/2007, Junio C Hamano <gitster@pobox.com> wrote:

>  - I do not like extra whitespace between she-bang #! and the
>    path.  Looks very ugly.

At least according to the Autoconf manual, there are some UNIXes that
require a space after the shebang. Not that I've seen such a system.
Personally, I find it easier to read with the space.


Dave.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] instaweb: added support Ruby's WEBrick server
  2007-09-18 23:15 ` Junio C Hamano
  2007-09-19  0:41   ` David Symonds
@ 2007-09-19  1:27   ` Johannes Schindelin
  2007-10-06 17:29     ` mike
  2 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2007-09-19  1:27 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: mike dalessio, git, normalperson

Hi,

On Tue, 18 Sep 2007, Junio C Hamano wrote:

> I wonder how popular instaweb is and how widely it is used. I've 
> actually wondering if we should demote it to contrib/ somewhere, but it 
> gets occasional updates so people must be using it...

I have to admit that I found it easier to install gitweb manually, 
especially with recent documentation enhancements, _and_ the constraint 
that I had to use an existing DocumentRoot.

So I would not be opposed to move this into contrib/.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] instaweb: allow for use of auto-generated scripts
@ 2007-10-06 17:29     ` mike
  0 siblings, 0 replies; 8+ messages in thread
From: mike @ 2007-10-06 17:29 UTC (permalink / raw)
  To: normalperson, gitster; +Cc: git, Mike Dalessio

this patch allows scripts that reside in $fqgitdir/gitweb to be used
for firing up an instaweb server. this lays the groundwork for
extending instaweb support to non-standard web servers, which may
require a script for proper invocation.

Signed-off-by: Mike Dalessio <mike@csa.net>
---
 git-instaweb.sh |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/git-instaweb.sh b/git-instaweb.sh
index b79c6b6..42d9c34 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
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] instaweb: support for Ruby's WEBrick server
@ 2007-10-06 17:29       ` mike
  0 siblings, 0 replies; 8+ messages in thread
From: mike @ 2007-10-06 17:29 UTC (permalink / raw)
  To: normalperson, gitster; +Cc: git, Mike Dalessio

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>
---
 Documentation/git-instaweb.txt |    2 +-
 git-instaweb.sh                |   40 ++++++++++++++++++++++++++++++++++++++++
 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)
 
 -m|--module-path::
diff --git a/git-instaweb.sh b/git-instaweb.sh
index 42d9c34..859be4a 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
-- 
1.5.2.5

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] instaweb: allow for use of auto-generated scripts
@ 2007-10-14  9:49     ` Eric Wong
  0 siblings, 0 replies; 8+ messages in thread
From: Eric Wong @ 2007-10-14  9:49 UTC (permalink / raw)
  To: mike; +Cc: Junio C Hamano, git

mike@csa.net wrote:
> this patch allows scripts that reside in $fqgitdir/gitweb to be used
> for firing up an instaweb server. this lays the groundwork for
> extending instaweb support to non-standard web servers, which may
> require a script for proper invocation.
> 
> Signed-off-by: Mike Dalessio <mike@csa.net>

Thanks, sorry for the late reply, it slipped my mind for a while.

Both patches in this series:
Acked-by: Eric Wong <normalperson@yhbt.net>

> ---
>  git-instaweb.sh |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/git-instaweb.sh b/git-instaweb.sh
> index b79c6b6..42d9c34 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
> -- 
-- 
Eric Wong

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-10-14  9:49 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-18 12:16 [PATCH] instaweb: added support Ruby's WEBrick server mike dalessio
2007-09-18 20:40 ` Eric Wong
2007-09-18 23:15 ` Junio C Hamano
2007-09-19  0:41   ` David Symonds
2007-09-19  1:27   ` Johannes Schindelin
2007-10-06 17:29   ` [PATCH 1/2] instaweb: allow for use of auto-generated scripts mike
2007-10-06 17:29     ` mike
2007-10-06 17:29     ` [PATCH 2/2] instaweb: support for Ruby's WEBrick server mike
2007-10-06 17:29       ` mike
2007-10-14  9:49     ` [PATCH 1/2] instaweb: allow for use of auto-generated scripts Eric Wong

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.