(http) issues of $HOME, startup (birth!), and death

- deal with issues of HOME not being available...
  - "where_is_rc" finally has a purpose; see comment block before
    function
This commit is contained in:
Sitaram Chamarty 2010-09-05 18:47:10 +05:30
parent 52e0ed3488
commit f4e011226a

View file

@ -209,33 +209,50 @@ sub collect_repo_patts
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# where is the rc file hiding? # birth and death registration ;-)
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# background
# till now, the rc file was in one fixed place: .gitolite.rc in $HOME of the
# user hosting the gitolite repos. This was fine, because gitolite is all
# about empowering non-root users :-)
# but in smart http mode, running under "apache", you should actually use
# $GITOLITE_HTTP_HOME instead of $HOME (in fact $HOME may not even be
# defined). However, the dependency on $HOME is so pervasive that we'd best
# just set it here and be done. We also set $ENV{GL_RC} to point to the rc
# file
# every gitolite program ends up calling this anyway, so that's birth
# the second thing we need to do is handle death a little better. A plain
# "die" was fine for ssh but http has all that extra gunk it needs. So we
# need to, in effect, create a "death handler".
# the name of the sub, however, is a holdover from when that was the sole
# purpose. I suck at function names anyway...
sub where_is_rc sub where_is_rc
{ {
# till now, the rc file was in one fixed place: .gitolite.rc in $HOME of die "I need either HOME or GITOLITE_HTTP_HOME env vars set\n" unless $ENV{GITOLITE_HTTP_HOME} or $ENV{HOME};
# the user hosting the gitolite repos. This was fine, because gitolite is if ($ENV{GITOLITE_HTTP_HOME}) {
# all about empowering non-root users :-) # smart http mode; GITOLITE_HTTP_HOME becomes our HOME
$ENV{HOME} = $ENV{GITOLITE_HTTP_HOME};
# then we wanted to make a debian package out of it (thank you, Rhonda!) $SIG{__DIE__} = sub {
# which means (a) it's going to be installed by root anyway and (b) any my $msg = shift; chomp($msg);
# config files have to be in /etc/<something> &print_http_headers(500, "error - gitolite");
print "$msg\r\n";
# the only way to resolve this in a backward compat way is to look for the print STDERR "$msg\n";
# $HOME one, and if you don't find it look for the /etc one exit 0; # if it's ok for die_webcgi in git.git/http-backend.c, it's ok for me ;-)
}
# this common routine does that, setting an env var for the first one it }
# finds
return if $ENV{GL_RC}; return if $ENV{GL_RC};
for my $glrc ( $ENV{HOME} . "/.gitolite.rc", "/etc/gitolite/gitolite.rc" ) { my $glrc = $ENV{HOME} . "/.gitolite.rc";
if (-f $glrc) { $ENV{GL_RC} = $glrc if (-f $glrc);
$ENV{GL_RC} = $glrc;
return;
}
}
} }
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------