gitweb: fallback to system-wide config file if default config does not exist

From a distribution point of view, configuration files for applications
should reside in /etc/.  On the other hand it's convenient for multiple
instances of gitweb (e.g. virtual web servers on a single machine) to have
a per-instance configuration file, just as gitweb currently supports
through the file gitweb_config.perl next to the cgi.

To support both at runtime, this commit introduces GITWEB_CONFIG_SYSTEM as
a system-wide configuration file which will be used as a fallback if the
config file sprecified throug GITWEB_CONFIG does not exist.

See also
 http://bugs.debian.org/450592

Signed-off-by: Gerrit Pape <pape@smarden.org>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Gerrit Pape 2008-03-26 18:11:19 +00:00 committed by Junio C Hamano
parent 1768905b51
commit 17a8b25005
4 changed files with 20 additions and 3 deletions

View File

@ -189,6 +189,7 @@ ETC_GITCONFIG = $(sysconfdir)/gitconfig
# default configuration for gitweb # default configuration for gitweb
GITWEB_CONFIG = gitweb_config.perl GITWEB_CONFIG = gitweb_config.perl
GITWEB_CONFIG_SYSTEM = /etc/gitweb.conf
GITWEB_HOME_LINK_STR = projects GITWEB_HOME_LINK_STR = projects
GITWEB_SITENAME = GITWEB_SITENAME =
GITWEB_PROJECTROOT = /pub/git GITWEB_PROJECTROOT = /pub/git

View File

@ -95,7 +95,11 @@ for gitweb (in gitweb/README).
by default it is file named gitweb_config.perl in the same place as by default it is file named gitweb_config.perl in the same place as
gitweb.cgi script. You can control default place for config file gitweb.cgi script. You can control default place for config file
using GITWEB_CONFIG build configuration variable, and you can set it using GITWEB_CONFIG build configuration variable, and you can set it
using GITWEB_CONFIG environmental variable. using GITWEB_CONFIG environmental variable. If this file does not
exist, gitweb looks for a system-wide configuration file, normally
/etc/gitweb.conf. You can change the default using the
GITWEB_CONFIG_SYSTEM build configuration variable, and override it
through GITWEB_CONFIG_SYSTEM environmental variable.
- Gitweb config file is [fragment] of perl code. You can set variables - Gitweb config file is [fragment] of perl code. You can set variables
using "our $variable = value"; text from "#" character until the end using "our $variable = value"; text from "#" character until the end

View File

@ -100,13 +100,20 @@ You can specify the following configuration variables when building GIT:
is set when gitweb.cgi is executed, then the file specified in the is set when gitweb.cgi is executed, then the file specified in the
environment variable will be loaded instead of the file specified environment variable will be loaded instead of the file specified
when gitweb.cgi was created. [Default: gitweb_config.perl] when gitweb.cgi was created. [Default: gitweb_config.perl]
* GITWEB_CONFIG_SYSTEM
This Perl file will be loaded using 'do' as a fallback if GITWEB_CONFIG
does not exist. If the environment variable GITWEB_CONFIG_SYSTEM is set
when gitweb.cgi is executed, then the file specified in the environment
variable will be loaded instead of the file specified when gitweb.cgi was
created. [Default: /etc/gitweb.conf]
Runtime gitweb configuration Runtime gitweb configuration
---------------------------- ----------------------------
You can adjust gitweb behaviour using the file specified in `GITWEB_CONFIG` You can adjust gitweb behaviour using the file specified in `GITWEB_CONFIG`
(defaults to 'gitweb_config.perl' in the same directory as the CGI). (defaults to 'gitweb_config.perl' in the same directory as the CGI), and
as a fallback `GITWEB_CONFIG_SYSTEM` (defaults to /etc/gitweb.conf).
The most notable thing that is not configurable at compile time are the The most notable thing that is not configurable at compile time are the
optional features, stored in the '%features' variable. optional features, stored in the '%features' variable.

View File

@ -369,7 +369,12 @@ sub filter_snapshot_fmts {
} }
our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "++GITWEB_CONFIG++"; our $GITWEB_CONFIG = $ENV{'GITWEB_CONFIG'} || "++GITWEB_CONFIG++";
do $GITWEB_CONFIG if -e $GITWEB_CONFIG; if (-e $GITWEB_CONFIG) {
do $GITWEB_CONFIG;
} else {
our $GITWEB_CONFIG_SYSTEM = $ENV{'GITWEB_CONFIG_SYSTEM'} || "++GITWEB_CONFIG_SYSTEM++";
do $GITWEB_CONFIG_SYSTEM if -e $GITWEB_CONFIG_SYSTEM;
}
# version of the core git binary # version of the core git binary
our $git_version = qx($GIT --version) =~ m/git version (.*)$/ ? $1 : "unknown"; our $git_version = qx($GIT --version) =~ m/git version (.*)$/ ? $1 : "unknown";