-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* ew/instaweb: instaweb: fix unportable ';' usage in sed Makefile: replace ugly and unportable sed invocation Add git-instaweb, instantly browse the working repo with gitweb gitweb: Declare global variables with "our" gitweb: Enable tree (directory) history display gitweb: optimize per-file history generation
- Loading branch information
Showing
4 changed files
with
335 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
git-instaweb(1) | ||
=============== | ||
|
||
NAME | ||
---- | ||
git-instaweb - instantly browse your working repository in gitweb | ||
|
||
SYNOPSIS | ||
-------- | ||
'git-instaweb' [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>] | ||
|
||
'git-instaweb' [--start] [--stop] [--restart] | ||
|
||
DESCRIPTION | ||
----------- | ||
A simple script to setup gitweb and a web server for browsing the local | ||
repository. | ||
|
||
OPTIONS | ||
------- | ||
|
||
-l|--local:: | ||
Only bind the web server to the local IP (127.0.0.1). | ||
|
||
-d|--httpd:: | ||
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. | ||
(Default: lighttpd) | ||
|
||
-m|--module-path:: | ||
The module path (only needed if httpd is Apache). | ||
(Default: /usr/lib/apache2/modules) | ||
|
||
-p|--port:: | ||
The port number to bind the httpd to. (Default: 1234) | ||
|
||
-b|--browser:: | ||
|
||
The web browser command-line to execute to view the gitweb page. | ||
If blank, the URL of the gitweb instance will be printed to | ||
stdout. (Default: 'firefox') | ||
|
||
--start:: | ||
Start the httpd instance and exit. This does not generate | ||
any of the configuration files for spawning a new instance. | ||
|
||
--stop:: | ||
Stop the httpd instance and exit. This does not generate | ||
any of the configuration files for spawning a new instance, | ||
nor does it close the browser. | ||
|
||
--restart:: | ||
Restart the httpd instance and exit. This does not generate | ||
any of the configuration files for spawning a new instance. | ||
|
||
CONFIGURATION | ||
------------- | ||
|
||
You may specify configuration in your .git/config | ||
|
||
----------------------------------------------------------------------- | ||
[instaweb] | ||
local = true | ||
httpd = apache2 -f | ||
port = 4321 | ||
browser = konqueror | ||
modulepath = /usr/lib/apache2/modules | ||
|
||
----------------------------------------------------------------------- | ||
|
||
Author | ||
------ | ||
Written by Eric Wong <normalperson@yhbt.net> | ||
|
||
Documentation | ||
-------------- | ||
Documentation by Eric Wong <normalperson@yhbt.net>. | ||
|
||
GIT | ||
--- | ||
Part of the gitlink:git[7] suite | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,235 @@ | ||
#!/bin/sh | ||
# | ||
# Copyright (c) 2006 Eric Wong | ||
# | ||
USAGE='[--start] [--stop] [--restart] | ||
[--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>] | ||
[--module-path=<path> (for Apache2 only)]' | ||
|
||
. git-sh-setup | ||
|
||
case "$GIT_DIR" in | ||
/*) | ||
fqgitdir="$GIT_DIR" ;; | ||
*) | ||
fqgitdir="$PWD/$GIT_DIR" ;; | ||
esac | ||
|
||
local="`git repo-config --bool --get instaweb.local`" | ||
httpd="`git repo-config --get instaweb.httpd`" | ||
browser="`git repo-config --get instaweb.browser`" | ||
port=`git repo-config --get instaweb.port` | ||
module_path="`git repo-config --get instaweb.modulepath`" | ||
|
||
conf=$GIT_DIR/gitweb/httpd.conf | ||
|
||
# Defaults: | ||
|
||
# if installed, it doens't need further configuration (module_path) | ||
test -z "$httpd" && httpd='lighttpd -f' | ||
|
||
# probably the most popular browser among gitweb users | ||
test -z "$browser" && browser='firefox' | ||
|
||
# any untaken local port will do... | ||
test -z "$port" && port=1234 | ||
|
||
start_httpd () { | ||
httpd_only="`echo $httpd | cut -f1 -d' '`" | ||
if test "`expr index $httpd_only /`" -eq '1' || \ | ||
which $httpd_only >/dev/null | ||
then | ||
$httpd $fqgitdir/gitweb/httpd.conf | ||
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 | ||
do | ||
if test -x "$i/$httpd_only" | ||
then | ||
# don't quote $httpd, there can be | ||
# arguments to it (-f) | ||
$i/$httpd "$fqgitdir/gitweb/httpd.conf" | ||
return | ||
fi | ||
done | ||
fi | ||
} | ||
|
||
stop_httpd () { | ||
test -f "$fqgitdir/pid" && kill `cat "$fqgitdir/pid"` | ||
} | ||
|
||
while case "$#" in 0) break ;; esac | ||
do | ||
case "$1" in | ||
--stop|stop) | ||
stop_httpd | ||
exit 0 | ||
;; | ||
--start|start) | ||
start_httpd | ||
exit 0 | ||
;; | ||
--restart|restart) | ||
stop_httpd | ||
start_httpd | ||
exit 0 | ||
;; | ||
--local|-l) | ||
local=true | ||
;; | ||
-d|--httpd|--httpd=*) | ||
case "$#,$1" in | ||
*,*=*) | ||
httpd=`expr "$1" : '-[^=]*=\(.*\)'` ;; | ||
1,*) | ||
usage ;; | ||
*) | ||
httpd="$2" | ||
shift ;; | ||
esac | ||
;; | ||
-b|--browser|--browser=*) | ||
case "$#,$1" in | ||
*,*=*) | ||
browser=`expr "$1" : '-[^=]*=\(.*\)'` ;; | ||
1,*) | ||
usage ;; | ||
*) | ||
browser="$2" | ||
shift ;; | ||
esac | ||
;; | ||
-p|--port|--port=*) | ||
case "$#,$1" in | ||
*,*=*) | ||
port=`expr "$1" : '-[^=]*=\(.*\)'` ;; | ||
1,*) | ||
usage ;; | ||
*) | ||
port="$2" | ||
shift ;; | ||
esac | ||
;; | ||
-m|--module-path=*|--module-path) | ||
case "$#,$1" in | ||
*,*=*) | ||
module_path=`expr "$1" : '-[^=]*=\(.*\)'` ;; | ||
1,*) | ||
usage ;; | ||
*) | ||
module_path="$2" | ||
shift ;; | ||
esac | ||
;; | ||
*) | ||
usage | ||
;; | ||
esac | ||
shift | ||
done | ||
|
||
mkdir -p "$GIT_DIR/gitweb/tmp" | ||
GIT_EXEC_PATH="`git --exec-path`" | ||
GIT_DIR="$fqgitdir" | ||
export GIT_EXEC_PATH GIT_DIR | ||
|
||
|
||
lighttpd_conf () { | ||
cat > "$conf" <<EOF | ||
server.document-root = "$fqgitdir/gitweb" | ||
server.port = $port | ||
server.modules = ( "mod_cgi" ) | ||
server.indexfiles = ( "gitweb.cgi" ) | ||
server.pid-file = "$fqgitdir/pid" | ||
cgi.assign = ( ".cgi" => "" ) | ||
mimetype.assign = ( ".css" => "text/css" ) | ||
EOF | ||
test "$local" = true && echo 'server.bind = "127.0.0.1"' >> "$conf" | ||
} | ||
|
||
apache2_conf () { | ||
test -z "$module_path" && module_path=/usr/lib/apache2/modules | ||
mkdir -p "$GIT_DIR/gitweb/logs" | ||
bind= | ||
test "$local" = true && bind='127.0.0.1:' | ||
echo 'text/css css' > $fqgitdir/mime.types | ||
cat > "$conf" <<EOF | ||
ServerRoot "$fqgitdir/gitweb" | ||
DocumentRoot "$fqgitdir/gitweb" | ||
PidFile "$fqgitdir/pid" | ||
Listen $bind$port | ||
TypesConfig $fqgitdir/mime.types | ||
DirectoryIndex gitweb.cgi | ||
EOF | ||
|
||
# check to see if Dennis Stosberg's mod_perl compatibility patch | ||
# (<20060621130708.Gcbc6e5c@leonov.stosberg.net>) has been applied | ||
if test -f "$module_path/mod_perl.so" && grep '^our $gitbin' \ | ||
"$GIT_DIR/gitweb/gitweb.cgi" >/dev/null | ||
then | ||
# favor mod_perl if available | ||
cat >> "$conf" <<EOF | ||
LoadModule perl_module $module_path/mod_perl.so | ||
PerlPassEnv GIT_DIR | ||
PerlPassEnv GIT_EXEC_DIR | ||
<Location /gitweb.cgi> | ||
SetHandler perl-script | ||
PerlResponseHandler ModPerl::Registry | ||
PerlOptions +ParseHeaders | ||
Options +ExecCGI | ||
</Location> | ||
EOF | ||
else | ||
# plain-old CGI | ||
cat >> "$conf" <<EOF | ||
LoadModule cgi_module $module_path/mod_cgi.so | ||
AddHandler cgi-script .cgi | ||
<Location /gitweb.cgi> | ||
Options +ExecCGI | ||
</Location> | ||
EOF | ||
fi | ||
} | ||
|
||
script=' | ||
s#^\(my\|our\) $projectroot =.*#\1 $projectroot = "'`dirname $fqgitdir`'";# | ||
s#\(my\|our\) $gitbin =.*#\1 $gitbin = "'$GIT_EXEC_PATH'";# | ||
s#\(my\|our\) $projects_list =.*#\1 $projects_list = $projectroot;# | ||
s#\(my\|our\) $git_temp =.*#\1 $git_temp = "'$fqgitdir/gitweb/tmp'";#' | ||
|
||
gitweb_cgi () { | ||
cat > "$1.tmp" <<\EOFGITWEB | ||
@@GITWEB_CGI@@ | ||
EOFGITWEB | ||
sed "$script" "$1.tmp" > "$1" | ||
chmod +x "$1" | ||
rm -f "$1.tmp" | ||
} | ||
|
||
gitweb_css () { | ||
cat > "$1" <<\EOFGITWEB | ||
@@GITWEB_CSS@@ | ||
EOFGITWEB | ||
} | ||
|
||
gitweb_cgi $GIT_DIR/gitweb/gitweb.cgi | ||
gitweb_css $GIT_DIR/gitweb/gitweb.css | ||
|
||
case "$httpd" in | ||
*lighttpd*) | ||
lighttpd_conf | ||
;; | ||
*apache2*) | ||
apache2_conf | ||
;; | ||
*) | ||
echo "Unknown httpd specified: $httpd" | ||
exit 1 | ||
;; | ||
esac | ||
|
||
start_httpd | ||
test -z "$browser" && browser=echo | ||
$browser http://127.0.0.1:$port |