Merge branch 'maint'
* maint: gitweb: Fix project-specific feature override behavior gitweb multiple project roots documentation
This commit is contained in:
commit
a75bab51ae
@ -312,12 +312,16 @@ If you want to have one URL for both gitweb and your http://
|
|||||||
repositories, you can configure apache like this:
|
repositories, you can configure apache like this:
|
||||||
|
|
||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
ServerName git.example.org
|
ServerName git.example.org
|
||||||
DocumentRoot /pub/git
|
DocumentRoot /pub/git
|
||||||
SetEnv GITWEB_CONFIG /etc/gitweb.conf
|
SetEnv GITWEB_CONFIG /etc/gitweb.conf
|
||||||
|
|
||||||
|
# turning on mod rewrite
|
||||||
RewriteEngine on
|
RewriteEngine on
|
||||||
|
|
||||||
# make the front page an internal rewrite to the gitweb script
|
# make the front page an internal rewrite to the gitweb script
|
||||||
RewriteRule ^/$ /cgi-bin/gitweb.cgi
|
RewriteRule ^/$ /cgi-bin/gitweb.cgi
|
||||||
|
|
||||||
# make access for "dumb clients" work
|
# make access for "dumb clients" work
|
||||||
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
|
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
@ -343,6 +347,63 @@ something like the following in your gitweb.conf (or gitweb_config.perl) file:
|
|||||||
$home_link = "/";
|
$home_link = "/";
|
||||||
|
|
||||||
|
|
||||||
|
Webserver configuration with multiple projects' root
|
||||||
|
----------------------------------------------------
|
||||||
|
|
||||||
|
If you want to use gitweb with several project roots you can edit your apache
|
||||||
|
virtual host and gitweb.conf configuration files like this :
|
||||||
|
|
||||||
|
virtual host configuration :
|
||||||
|
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName git.example.org
|
||||||
|
DocumentRoot /pub/git
|
||||||
|
SetEnv GITWEB_CONFIG /etc/gitweb.conf
|
||||||
|
|
||||||
|
# turning on mod rewrite
|
||||||
|
RewriteEngine on
|
||||||
|
|
||||||
|
# make the front page an internal rewrite to the gitweb script
|
||||||
|
RewriteRule ^/$ /cgi-bin/gitweb.cgi [QSA,L,PT]
|
||||||
|
|
||||||
|
# look for a public_git folder in unix users' home
|
||||||
|
# http://git.example.org/~<user>/
|
||||||
|
RewriteRule ^/\~([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
|
||||||
|
|
||||||
|
# http://git.example.org/+<user>/
|
||||||
|
#RewriteRule ^/\+([^\/]+)(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
|
||||||
|
|
||||||
|
# http://git.example.org/user/<user>/
|
||||||
|
#RewriteRule ^/user/([^\/]+)/(gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/home/$1/public_git/,L,PT]
|
||||||
|
|
||||||
|
# defined list of project roots
|
||||||
|
RewriteRule ^/scm(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/pub/scm/,L,PT]
|
||||||
|
RewriteRule ^/var(/|/gitweb.cgi)?$ /cgi-bin/gitweb.cgi [QSA,E=GITWEB_PROJECTROOT:/var/git/,L,PT]
|
||||||
|
|
||||||
|
# make access for "dumb clients" work
|
||||||
|
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
|
||||||
|
</VirtualHost>
|
||||||
|
|
||||||
|
gitweb.conf configuration :
|
||||||
|
|
||||||
|
$projectroot = $ENV{'GITWEB_PROJECTROOT'} || "/pub/git";
|
||||||
|
|
||||||
|
These configurations enable two things. First, each unix user (<user>) of the
|
||||||
|
server will be able to browse through gitweb git repositories found in
|
||||||
|
~/public_git/ with the following url : http://git.example.org/~<user>/
|
||||||
|
|
||||||
|
If you do not want this feature on your server just remove the second rewrite rule.
|
||||||
|
|
||||||
|
If you already use mod_userdir in your virtual host or you don't want to use
|
||||||
|
the '~' as first character just comment or remove the second rewrite rule and
|
||||||
|
uncomment one of the following according to what you want.
|
||||||
|
|
||||||
|
Second, repositories found in /pub/scm/ and /var/git/ will be accesible
|
||||||
|
through http://git.example.org/scm/ and http://git.example.org/var/.
|
||||||
|
You can add as many project roots as you want by adding rewrite rules like the
|
||||||
|
third and the fourth.
|
||||||
|
|
||||||
|
|
||||||
PATH_INFO usage
|
PATH_INFO usage
|
||||||
-----------------------
|
-----------------------
|
||||||
If you enable PATH_INFO usage in gitweb by putting
|
If you enable PATH_INFO usage in gitweb by putting
|
||||||
|
@ -454,7 +454,11 @@ sub gitweb_get_feature {
|
|||||||
$feature{$name}{'sub'},
|
$feature{$name}{'sub'},
|
||||||
$feature{$name}{'override'},
|
$feature{$name}{'override'},
|
||||||
@{$feature{$name}{'default'}});
|
@{$feature{$name}{'default'}});
|
||||||
if (!$override) { return @defaults; }
|
# project specific override is possible only if we have project
|
||||||
|
our $git_dir; # global variable, declared later
|
||||||
|
if (!$override || !defined $git_dir) {
|
||||||
|
return @defaults;
|
||||||
|
}
|
||||||
if (!defined $sub) {
|
if (!defined $sub) {
|
||||||
warn "feature $name is not overridable";
|
warn "feature $name is not overridable";
|
||||||
return @defaults;
|
return @defaults;
|
||||||
@ -2212,6 +2216,9 @@ sub config_to_multi {
|
|||||||
sub git_get_project_config {
|
sub git_get_project_config {
|
||||||
my ($key, $type) = @_;
|
my ($key, $type) = @_;
|
||||||
|
|
||||||
|
# do we have project
|
||||||
|
return unless (defined $project && defined $git_dir);
|
||||||
|
|
||||||
# key sanity check
|
# key sanity check
|
||||||
return unless ($key);
|
return unless ($key);
|
||||||
$key =~ s/^gitweb\.//;
|
$key =~ s/^gitweb\.//;
|
||||||
|
@ -591,13 +591,21 @@ test_debug 'cat gitweb.log'
|
|||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
# gitweb config and repo config
|
# gitweb config and repo config
|
||||||
|
|
||||||
cat >>gitweb_config.perl <<EOF
|
cat >>gitweb_config.perl <<\EOF
|
||||||
|
|
||||||
\$feature{'blame'}{'override'} = 1;
|
# turn on override for each overridable feature
|
||||||
\$feature{'snapshot'}{'override'} = 1;
|
foreach my $key (keys %feature) {
|
||||||
\$feature{'avatar'}{'override'} = 1;
|
if ($feature{$key}{'sub'}) {
|
||||||
|
$feature{$key}{'override'} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
test_expect_success \
|
||||||
|
'config override: projects list (implicit)' \
|
||||||
|
'gitweb_run'
|
||||||
|
test_debug 'cat gitweb.log'
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'config override: tree view, features not overridden in repo config' \
|
'config override: tree view, features not overridden in repo config' \
|
||||||
'gitweb_run "p=.git;a=tree"'
|
'gitweb_run "p=.git;a=tree"'
|
||||||
|
Loading…
Reference in New Issue
Block a user