summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSitaram Chamarty <sitaram@atc.tcs.com>2013-06-28 09:40:22 +0530
committerSitaram Chamarty <sitaram@atc.tcs.com>2013-06-28 22:12:30 +0530
commit63865a16eb06218318f5d7c21faa4878db9b6693 (patch)
tree5a29a2099c92213d6439fcff0d06cc6505c7ef94
parent05e4093fb21150a223c1d98d69de1e39fdfa7f3e (diff)
setup some ENV vars from gitolite.conf options...
makes things much easier in hooks and triggers
-rwxr-xr-xsrc/gitolite-shell3
-rw-r--r--src/lib/Gitolite/Conf/Load.pm19
-rw-r--r--src/lib/Gitolite/Rc.pm6
3 files changed, 28 insertions, 0 deletions
diff --git a/src/gitolite-shell b/src/gitolite-shell
index a3ec321..0ee48e3 100755
--- a/src/gitolite-shell
+++ b/src/gitolite-shell
@@ -103,6 +103,9 @@ sub main {
$ENV{GL_REPO} = $repo;
my $aa = ( $verb =~ 'upload' ? 'R' : 'W' );
+ # set up env vars from options set for this repo
+ env_options($repo);
+
# auto-create?
if ( repo_missing($repo) and access( $repo, $user, '^C', 'any' ) !~ /DENIED/ ) {
require Gitolite::Conf::Store;
diff --git a/src/lib/Gitolite/Conf/Load.pm b/src/lib/Gitolite/Conf/Load.pm
index c4051e4..295e888 100644
--- a/src/lib/Gitolite/Conf/Load.pm
+++ b/src/lib/Gitolite/Conf/Load.pm
@@ -8,6 +8,7 @@ package Gitolite::Conf::Load;
access
git_config
+ env_options
option
repo_missing
@@ -18,6 +19,7 @@ package Gitolite::Conf::Load;
);
use Exporter 'import';
+use Cwd;
use Gitolite::Common;
use Gitolite::Rc;
@@ -184,6 +186,23 @@ sub git_config {
return \%ret;
}
+sub env_options {
+ return unless -f "$rc{GL_ADMIN_BASE}/conf/gitolite.conf-compiled.pm";
+ # prevent catch-22 during initial install
+
+ my $cwd = getcwd();
+
+ my $repo = shift;
+ map { delete $ENV{$_} } grep { /^GL_OPTION_/ } keys %ENV;
+ my $h = git_config( $repo, '^gitolite-options.ENV\.' );
+ while (my ($k, $v) = each %$h) {
+ next unless $k =~ /^gitolite-options.ENV\.(\w+)$/;
+ $ENV{"GL_OPTION_" . $1} = $v;
+ }
+
+ chdir($cwd);
+}
+
sub option {
my ( $repo, $option ) = @_;
$option = "gitolite-options.$option";
diff --git a/src/lib/Gitolite/Rc.pm b/src/lib/Gitolite/Rc.pm
index a3f0c59..5e1f21e 100644
--- a/src/lib/Gitolite/Rc.pm
+++ b/src/lib/Gitolite/Rc.pm
@@ -271,6 +271,12 @@ sub version {
sub trigger {
my $rc_section = shift;
+ # if arg-2 (now arg-1, due to the 'shift' above) exists, it is a repo
+ # name, so setup env from options
+ require Gitolite::Conf::Load;
+ Gitolite::Conf::Load->import('env_options');
+ env_options($_[0]) if $_[0];
+
if ( exists $rc{$rc_section} ) {
if ( ref( $rc{$rc_section} ) ne 'ARRAY' ) {
_die "'$rc_section' section in rc file is not a perl list";