2009-08-30 08:41:55 +02:00
|
|
|
#!/usr/bin/perl
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
our $REPO_BASE;
|
|
|
|
our $GL_ADMINDIR;
|
|
|
|
our $GL_CONF;
|
|
|
|
|
|
|
|
# wrapper around mkdir; it's not an error if the directory exists, but it is
|
|
|
|
# an error if it doesn't exist and we can't create it
|
|
|
|
sub wrap_mkdir
|
|
|
|
{
|
|
|
|
my $dir = shift;
|
|
|
|
-d $dir or mkdir($dir) or die "mkdir $dir failed: $!\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
# the only path that is *fixed* (can't be changed without changing all 3
|
|
|
|
# programs) is ~/.gitolite.rc
|
|
|
|
|
|
|
|
my $glrc = $ENV{HOME} . "/.gitolite.rc";
|
|
|
|
unless (-f $glrc) {
|
|
|
|
# doesn't exist. Copy it across, tell user to edit it and come back
|
|
|
|
system("cp conf/example.gitolite.rc $glrc");
|
|
|
|
print STDERR "created $glrc\n";
|
|
|
|
print STDERR "please edit it, set the paths as you like, and rerun this script\n";
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
# ok now $glrc exists; read it to get the other paths
|
2009-09-01 16:06:00 +02:00
|
|
|
die "parse $glrc failed: " . ($! or $@) unless do $glrc;
|
2009-08-30 08:41:55 +02:00
|
|
|
|
|
|
|
# mkdir $REPO_BASE, $GL_ADMINDIR if they don't already exist
|
|
|
|
wrap_mkdir( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
|
|
|
wrap_mkdir($GL_ADMINDIR);
|
|
|
|
# mkdir $GL_ADMINDIR's subdirs
|
|
|
|
for my $dir qw(conf doc keydir src) {
|
|
|
|
wrap_mkdir("$GL_ADMINDIR/$dir");
|
|
|
|
}
|
|
|
|
|
|
|
|
# "src" and "doc" will be overwritten on each install, but not conf
|
|
|
|
system("cp -R src doc $GL_ADMINDIR");
|
|
|
|
|
|
|
|
unless (-f $GL_CONF) {
|
|
|
|
system("cp conf/example.conf $GL_CONF");
|
|
|
|
print STDERR <<EOF;
|
|
|
|
created $GL_CONF
|
|
|
|
please edit it, then run these two commands:
|
|
|
|
cd $GL_ADMINDIR
|
|
|
|
src/gl-compile-conf
|
|
|
|
(the "admin" document should help here...)
|
|
|
|
EOF
|
|
|
|
}
|
2009-09-01 17:03:19 +02:00
|
|
|
|
|
|
|
# finally, any potential changes to src/update-hook.pl must be propagated to
|
|
|
|
# all the repos' hook directories
|
|
|
|
my $repo_base_abs = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
|
|
|
# err, no need to get all worked up if you can't CD there -- this may be the
|
|
|
|
# very first run and it hasn't been created yet
|
|
|
|
if (chdir("$repo_base_abs")) {
|
|
|
|
for my $repo (`find . -type d -name "*.git"`) {
|
|
|
|
chomp ($repo);
|
|
|
|
system("cp $GL_ADMINDIR/src/update-hook.pl $repo/hooks/update");
|
|
|
|
chmod 0755, "$repo/hooks/update";
|
|
|
|
}
|
|
|
|
}
|