(mini refactor) clean up the repo_base_abs stuff
make it a sort of "super global" (an ENV var) all through, because *everyone* seems to need it *and* this variable is pretty much constant for the entire install
This commit is contained in:
parent
33d052dc7d
commit
61802045d9
|
@ -182,17 +182,17 @@ sub new_repo
|
||||||
# "who created this repo", "am I on the R list", and "am I on the RW list"?
|
# "who created this repo", "am I on the R list", and "am I on the RW list"?
|
||||||
sub wild_repo_rights
|
sub wild_repo_rights
|
||||||
{
|
{
|
||||||
my ($repo_base_abs, $repo, $user) = @_;
|
my ($repo, $user) = @_;
|
||||||
# creator
|
# creator
|
||||||
my $c = '';
|
my $c = '';
|
||||||
if ( -f "$repo_base_abs/$repo.git/gl-creater") {
|
if ( -f "$ENV{GL_REPO_BASE_ABS}/$repo.git/gl-creater") {
|
||||||
my $fh = wrap_open("<", "$repo_base_abs/$repo.git/gl-creater");
|
my $fh = wrap_open("<", "$ENV{GL_REPO_BASE_ABS}/$repo.git/gl-creater");
|
||||||
chomp($c = <$fh>);
|
chomp($c = <$fh>);
|
||||||
}
|
}
|
||||||
# $user's R and W rights
|
# $user's R and W rights
|
||||||
my ($r, $w); $r = ''; $w = '';
|
my ($r, $w); $r = ''; $w = '';
|
||||||
if ($user and -f "$repo_base_abs/$repo.git/gl-perms") {
|
if ($user and -f "$ENV{GL_REPO_BASE_ABS}/$repo.git/gl-perms") {
|
||||||
my $fh = wrap_open("<", "$repo_base_abs/$repo.git/gl-perms");
|
my $fh = wrap_open("<", "$ENV{GL_REPO_BASE_ABS}/$repo.git/gl-perms");
|
||||||
my $perms = join ("", <$fh>);
|
my $perms = join ("", <$fh>);
|
||||||
if ($perms) {
|
if ($perms) {
|
||||||
$r = $user if $perms =~ /^\s*R(?=\s).*\s(\@all|$user)(\s|$)/m;
|
$r = $user if $perms =~ /^\s*R(?=\s).*\s(\@all|$user)(\s|$)/m;
|
||||||
|
@ -209,10 +209,10 @@ sub wild_repo_rights
|
||||||
|
|
||||||
sub get_set_perms
|
sub get_set_perms
|
||||||
{
|
{
|
||||||
my($repo_base_abs, $repo, $verb, $user) = @_;
|
my($repo, $verb, $user) = @_;
|
||||||
my ($creator, $dummy, $dummy2) = &wild_repo_rights($repo_base_abs, $repo, "");
|
my ($creator, $dummy, $dummy2) = &wild_repo_rights($repo, "");
|
||||||
die "$repo doesnt exist or is not yours\n" unless $user eq $creator;
|
die "$repo doesnt exist or is not yours\n" unless $user eq $creator;
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
wrap_chdir("$repo.git");
|
wrap_chdir("$repo.git");
|
||||||
if ($verb eq 'getperms') {
|
if ($verb eq 'getperms') {
|
||||||
system("cat", "gl-perms") if -f "gl-perms";
|
system("cat", "gl-perms") if -f "gl-perms";
|
||||||
|
@ -229,10 +229,10 @@ sub get_set_perms
|
||||||
|
|
||||||
sub get_set_desc
|
sub get_set_desc
|
||||||
{
|
{
|
||||||
my($repo_base_abs, $repo, $verb, $user) = @_;
|
my($repo, $verb, $user) = @_;
|
||||||
my ($creator, $dummy, $dummy2) = &wild_repo_rights($repo_base_abs, $repo, "");
|
my ($creator, $dummy, $dummy2) = &wild_repo_rights($repo, "");
|
||||||
die "$repo doesnt exist or is not yours\n" unless $user eq $creator;
|
die "$repo doesnt exist or is not yours\n" unless $user eq $creator;
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
wrap_chdir("$repo.git");
|
wrap_chdir("$repo.git");
|
||||||
if ($verb eq 'getdesc') {
|
if ($verb eq 'getdesc') {
|
||||||
system("cat", "description") if -f "description";
|
system("cat", "description") if -f "description";
|
||||||
|
@ -416,7 +416,7 @@ sub report_basic
|
||||||
|
|
||||||
sub expand_wild
|
sub expand_wild
|
||||||
{
|
{
|
||||||
my($GL_ADMINDIR, $GL_CONF_COMPILED, $repo_base_abs, $repo, $user) = @_;
|
my($GL_ADMINDIR, $GL_CONF_COMPILED, $repo, $user) = @_;
|
||||||
|
|
||||||
&report_version($GL_ADMINDIR, $user);
|
&report_version($GL_ADMINDIR, $user);
|
||||||
print "\ryou have access to the following repos on the server:\r\n";
|
print "\ryou have access to the following repos on the server:\r\n";
|
||||||
|
@ -427,7 +427,7 @@ sub expand_wild
|
||||||
# display matching repos (from *all* the repos in the system) that $user
|
# display matching repos (from *all* the repos in the system) that $user
|
||||||
# has at least "R" access to
|
# has at least "R" access to
|
||||||
|
|
||||||
chdir("$repo_base_abs") or die "chdir $repo_base_abs failed: $!\n";
|
chdir("$ENV{GL_REPO_BASE_ABS}") or die "chdir $ENV{GL_REPO_BASE_ABS} failed: $!\n";
|
||||||
my $count = 0;
|
my $count = 0;
|
||||||
for my $actual_repo (`find . -type d -name "*.git"|sort`) {
|
for my $actual_repo (`find . -type d -name "*.git"|sort`) {
|
||||||
chomp ($actual_repo);
|
chomp ($actual_repo);
|
||||||
|
@ -477,7 +477,7 @@ sub expand_wild
|
||||||
if ($exists) {
|
if ($exists) {
|
||||||
# these will be empty if it's not a wildcard repo anyway
|
# these will be empty if it's not a wildcard repo anyway
|
||||||
my ($read, $write);
|
my ($read, $write);
|
||||||
($creator, $read, $write) = &wild_repo_rights($ENV{GL_REPO_BASE_ABS}, $repo, $ENV{GL_USER});
|
($creator, $read, $write) = &wild_repo_rights($repo, $ENV{GL_USER});
|
||||||
# get access list with these substitutions
|
# get access list with these substitutions
|
||||||
$wild = &parse_acl($GL_CONF_COMPILED, $repo, $creator || "NOBODY", $read || "NOBODY", $write || "NOBODY");
|
$wild = &parse_acl($GL_CONF_COMPILED, $repo, $creator || "NOBODY", $read || "NOBODY", $write || "NOBODY");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -53,7 +53,7 @@ $ENV{GL_WILDREPOS_DEFPERMS} = $GL_WILDREPOS_DEFPERMS if $GL_WILDREPOS_DEFPERMS;
|
||||||
# set the umask before creating any files
|
# set the umask before creating any files
|
||||||
umask($REPO_UMASK);
|
umask($REPO_UMASK);
|
||||||
|
|
||||||
my $repo_base_abs = $ENV{GL_REPO_BASE_ABS} = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
$ENV{GL_REPO_BASE_ABS} = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
# start...
|
# start...
|
||||||
|
@ -153,16 +153,16 @@ if ($ENV{SSH_ORIGINAL_COMMAND} =~ $CUSTOM_COMMANDS) {
|
||||||
$verb eq 'expand' ? $repo = '^' : die "$verb needs an argument\n" unless $repo;
|
$verb eq 'expand' ? $repo = '^' : die "$verb needs an argument\n" unless $repo;
|
||||||
if ($repo =~ $REPONAME_PATT and $verb =~ /getperms|setperms/) {
|
if ($repo =~ $REPONAME_PATT and $verb =~ /getperms|setperms/) {
|
||||||
# with an actual reponame, you can "getperms" or "setperms"
|
# with an actual reponame, you can "getperms" or "setperms"
|
||||||
get_set_perms($repo_base_abs, $repo, $verb, $user);
|
get_set_perms($repo, $verb, $user);
|
||||||
}
|
}
|
||||||
elsif ($repo =~ $REPONAME_PATT and $verb =~ /(get|set)desc/) {
|
elsif ($repo =~ $REPONAME_PATT and $verb =~ /(get|set)desc/) {
|
||||||
# with an actual reponame, you can "getdesc" or "setdesc"
|
# with an actual reponame, you can "getdesc" or "setdesc"
|
||||||
get_set_desc($repo_base_abs, $repo, $verb, $user);
|
get_set_desc($repo, $verb, $user);
|
||||||
}
|
}
|
||||||
elsif ($verb eq 'expand') {
|
elsif ($verb eq 'expand') {
|
||||||
# with a wildcard, you can "expand" it to see what repos actually match
|
# with a wildcard, you can "expand" it to see what repos actually match
|
||||||
die "$repo has invalid characters" unless "x$repo" =~ $REPOPATT_PATT;
|
die "$repo has invalid characters" unless "x$repo" =~ $REPOPATT_PATT;
|
||||||
expand_wild($GL_ADMINDIR, $GL_CONF_COMPILED, $repo_base_abs, $repo, $user);
|
expand_wild($GL_ADMINDIR, $GL_CONF_COMPILED, $repo, $user);
|
||||||
} else {
|
} else {
|
||||||
die "$cmd doesn't make sense to me\n";
|
die "$cmd doesn't make sense to me\n";
|
||||||
}
|
}
|
||||||
|
@ -205,7 +205,7 @@ $ENV{GL_REPO}=$repo;
|
||||||
my ($perm, $creator, $wild) = &repo_rights($repo);
|
my ($perm, $creator, $wild) = &repo_rights($repo);
|
||||||
if ($perm =~ /C/) {
|
if ($perm =~ /C/) {
|
||||||
# it was missing, and you have create perms
|
# it was missing, and you have create perms
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
new_repo($repo, "$GL_ADMINDIR/hooks/common", $user);
|
new_repo($repo, "$GL_ADMINDIR/hooks/common", $user);
|
||||||
&setup_repo_configs(\%repo_config, $repo, 1);
|
&setup_repo_configs(\%repo_config, $repo, 1);
|
||||||
wrap_chdir($ENV{HOME});
|
wrap_chdir($ENV{HOME});
|
||||||
|
|
|
@ -433,10 +433,10 @@ die "\n\t\t***** AAARGH! *****\n" .
|
||||||
|
|
||||||
# repo-base needs to be an absolute path for this loop to work right
|
# repo-base needs to be an absolute path for this loop to work right
|
||||||
# so if it was not already absolute, prefix $HOME.
|
# so if it was not already absolute, prefix $HOME.
|
||||||
my $repo_base_abs = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
$ENV{GL_REPO_BASE_ABS} = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
||||||
|
|
||||||
unless ($GL_NO_CREATE_REPOS) {
|
unless ($GL_NO_CREATE_REPOS) {
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
|
|
||||||
# autocreate repos. Start with the ones that are normal repos in %repos
|
# autocreate repos. Start with the ones that are normal repos in %repos
|
||||||
my @repos = grep { $_ =~ $REPONAME_PATT and not /^@/ } sort keys %repos;
|
my @repos = grep { $_ =~ $REPONAME_PATT and not /^@/ } sort keys %repos;
|
||||||
|
@ -453,7 +453,7 @@ unless ($GL_NO_CREATE_REPOS) {
|
||||||
print STDERR "creating $repo...\n";
|
print STDERR "creating $repo...\n";
|
||||||
new_repo($repo, "$GL_ADMINDIR/hooks/common");
|
new_repo($repo, "$GL_ADMINDIR/hooks/common");
|
||||||
# new_repo would have chdir'd us away; come back
|
# new_repo would have chdir'd us away; come back
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
}
|
}
|
||||||
|
|
||||||
# when repos are copied over from elsewhere, one had to run easy install
|
# when repos are copied over from elsewhere, one had to run easy install
|
||||||
|
@ -483,7 +483,7 @@ for my $repo (keys %repo_config) {
|
||||||
|
|
||||||
# wild
|
# wild
|
||||||
if (%repo_config and $GL_WILDREPOS and $GL_GITCONFIG_WILD) {
|
if (%repo_config and $GL_WILDREPOS and $GL_GITCONFIG_WILD) {
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
for my $repo (`find . -type d -name "*.git"`) {
|
for my $repo (`find . -type d -name "*.git"`) {
|
||||||
chomp ($repo);
|
chomp ($repo);
|
||||||
next unless -f "$ENV{GL_REPO_BASE_ABS}/$repo/gl-creater"; # all/only wild repos have this file
|
next unless -f "$ENV{GL_REPO_BASE_ABS}/$repo/gl-creater"; # all/only wild repos have this file
|
||||||
|
@ -503,7 +503,7 @@ if (%repo_config and $GL_WILDREPOS and $GL_GITCONFIG_WILD) {
|
||||||
# :-) These are now "pseduo users" -- giving them "R" access to a repo is all
|
# :-) These are now "pseduo users" -- giving them "R" access to a repo is all
|
||||||
# you have to do
|
# you have to do
|
||||||
|
|
||||||
wrap_chdir("$repo_base_abs");
|
wrap_chdir("$ENV{GL_REPO_BASE_ABS}");
|
||||||
|
|
||||||
unless ($GL_NO_DAEMON_NO_GITWEB) {
|
unless ($GL_NO_DAEMON_NO_GITWEB) {
|
||||||
# daemons first...
|
# daemons first...
|
||||||
|
|
|
@ -50,8 +50,8 @@ die "parse $ENV{GL_RC} failed: " . ($! or $@) unless do $ENV{GL_RC};
|
||||||
$ENV{PATH} .= ":$GIT_PATH" if $GIT_PATH;
|
$ENV{PATH} .= ":$GIT_PATH" if $GIT_PATH;
|
||||||
|
|
||||||
# mkdir $REPO_BASE, $GL_ADMINDIR if they don't already exist
|
# mkdir $REPO_BASE, $GL_ADMINDIR if they don't already exist
|
||||||
my $repo_base_abs = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
$ENV{GL_REPO_BASE_ABS} = ( $REPO_BASE =~ m(^/) ? $REPO_BASE : "$ENV{HOME}/$REPO_BASE" );
|
||||||
wrap_mkdir($repo_base_abs);
|
wrap_mkdir($ENV{GL_REPO_BASE_ABS});
|
||||||
wrap_mkdir($GL_ADMINDIR);
|
wrap_mkdir($GL_ADMINDIR);
|
||||||
# mkdir $GL_ADMINDIR's subdirs
|
# mkdir $GL_ADMINDIR's subdirs
|
||||||
for my $dir qw(conf doc keydir logs src hooks hooks/common hooks/gitolite-admin) {
|
for my $dir qw(conf doc keydir logs src hooks hooks/common hooks/gitolite-admin) {
|
||||||
|
@ -80,7 +80,7 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# finally, hooks must be propagated to all the repos in case they changed
|
# finally, hooks must be propagated to all the repos in case they changed
|
||||||
chdir("$repo_base_abs") or die "chdir $repo_base_abs failed: $!\n";
|
chdir("$ENV{GL_REPO_BASE_ABS}") or die "chdir $ENV{GL_REPO_BASE_ABS} failed: $!\n";
|
||||||
for my $repo (`find . -type d -name "*.git"`) {
|
for my $repo (`find . -type d -name "*.git"`) {
|
||||||
chomp ($repo);
|
chomp ($repo);
|
||||||
# propagate our own, plus any local admin-defined, hooks
|
# propagate our own, plus any local admin-defined, hooks
|
||||||
|
|
Loading…
Reference in a new issue