git-configs update code done

This commit is contained in:
Sitaram Chamarty 2012-03-19 16:15:21 +05:30
parent 7b1efe8a7b
commit af11919025
3 changed files with 139 additions and 0 deletions

View file

@ -246,6 +246,7 @@ __DATA__
POST_COMPILE => POST_COMPILE =>
[ [
'post-compile/ssh-authkeys', 'post-compile/ssh-authkeys',
'post-compile/update-git-configs',
'post-compile/update-gitweb-access-list', 'post-compile/update-gitweb-access-list',
'post-compile/update-git-daemon-access-list', 'post-compile/update-git-daemon-access-list',
], ],
@ -254,6 +255,7 @@ __DATA__
# these will run in sequence after a new wild repo is created # these will run in sequence after a new wild repo is created
POST_CREATE => POST_CREATE =>
[ [
# 'post-compile/update-git-configs',
# 'post-compile/update-gitweb-access-list', # 'post-compile/update-gitweb-access-list',
# 'post-compile/update-git-daemon-access-list', # 'post-compile/update-git-daemon-access-list',
], ],

View file

@ -0,0 +1,34 @@
#!/usr/bin/perl
# update git-config entries in each repo
# ----------------------------------------------------------------------
use FindBin;
use lib $ENV{GL_BINDIR};
use Gitolite::Rc;
use Gitolite::Common;
use Gitolite::Conf::Load;
use strict;
use warnings;
# ----------------------------------------------------------------------
my $RB = $rc{GL_REPO_BASE};
_chdir ($RB);
my $lpr = list_phy_repos();
for my $pr (@$lpr) {
my $gc = git_config($pr, '.');
while ( my ($key, $value) = each(%{ $gc }) ) {
next if $key =~ /^gitolite-options\./;
if ($value ne "") {
$value =~ s/^['"](.*)["']$/$1/;
$value =~ s/%GL_REPO/$pr/g;
system("git", "config", "--file", "$RB/$pr.git/config", $key, $value);
} else {
system("git", "config", "--file", "$RB/$pr.git/config", "--unset-all", $key);
}
}
}

103
t/git-config.t Executable file
View file

@ -0,0 +1,103 @@
#!/usr/bin/perl
use strict;
use warnings;
# this is hardcoded; change it if needed
use lib "src";
use Gitolite::Test;
# git config settings
# ----------------------------------------------------------------------
try "plan 21";
try "pwd";
my $od = text();
chomp($od);
# make foo.bar a valid gc key
$ENV{G3T_RC} = "$ENV{HOME}/g3trc";
put "$ENV{G3T_RC}", "\$rc{GIT_CONFIG_KEYS} = 'foo\.bar';\n";
confreset;confadd '
repo @all
config foo.bar = dft
repo gitolite-admin
RW+ = admin
config foo.bar =
repo testing
RW+ = @all
repo foo
RW = u1
config foo.bar = f1
repo frob
RW = u3
repo bar
RW = u2
config foo.bar = one
';
try "ADMIN_PUSH set1; !/FATAL/" or die text();
my $rb = `gitolite query-rc -n GL_REPO_BASE`;
try "
cd $rb; ok
egrep foo\\|bar *.git/config | sort
";
cmp 'bar.git/config: bare = true
bar.git/config: bar = one
bar.git/config:[foo]
foo.git/config: bare = true
foo.git/config: bar = f1
foo.git/config:[foo]
frob.git/config: bar = dft
frob.git/config: bare = true
frob.git/config:[foo]
gitolite-admin.git/config: bare = true
testing.git/config: bar = dft
testing.git/config: bare = true
testing.git/config:[foo]
';
try "cd $od; ok";
confadd '
repo frob
RW = u3
config foo.bar = none
repo bar
RW = u2
config foo.bar = one
';
try "ADMIN_PUSH set1; !/FATAL/" or die text();
try "
cd $rb; ok
egrep foo\\|bar *.git/config | sort
";
cmp 'bar.git/config: bare = true
bar.git/config: bar = one
bar.git/config:[foo]
foo.git/config: bare = true
foo.git/config: bar = f1
foo.git/config:[foo]
frob.git/config: bare = true
frob.git/config: bar = none
frob.git/config:[foo]
gitolite-admin.git/config: bare = true
testing.git/config: bar = dft
testing.git/config: bare = true
testing.git/config:[foo]
';