Git-Server
view release on metacpan or search on metacpan
}
die localtime().": [$who] git-server: You don't have shell access!\n";
}
my $dir = undef;
if ($cmd =~ /^(git-[\w\-]+) (.+)$/) {
my $op = $1;
my $repo = $2;
$repo = $1, $repo =~ s/'\\''/'/g if $repo =~ /^'(.+)'$/;
$repo =~ s%(\.git|/)+$%%;
my $home = $ENV{HOME} ||= (getpwuid $<)[7];
foreach my $try ("$repo.git/.git", "$repo.git", "$repo/.git", $repo) {
if (-d $try or $try =~ s{^/+}{} && -d $try or $try =~ s{^~/}{$home/} && -d $try) {
$dir = $try;
$ENV{GIT_DIR} = abs_path $dir;
last;
}
}
# Repository sanity check:
die localtime().": [$who] git-server: You can't access '$repo' git repository\n" unless $dir && -f "$dir/config" && -d "$dir/refs" && -d "$dir/objects";
else {
if (my $count = @repo_dirs) {
print "Commandline filtering $count specified repos: OK\n";
}
else {
print "Commandline scanning $ENV{HOME} for repos: OK\n";
}
}
#3. Scan repos
-d ($ENV{HOME} ||= [getpwuid $<]->[7]) or die "HOME broken";
if (!@repo_dirs and opendir my $fh, $ENV{HOME}) {
my @nodes = readdir $fh;
closedir $fh;
foreach my $node (@nodes) {
push @repo_dirs, "$ENV{HOME}/$node" if -f "$ENV{HOME}/$node/config" && -d "$ENV{HOME}/$node/refs" && -d "$ENV{HOME}/$node/objects" or -f "$ENV{HOME}/$node/.git/config";
}
}
my @repo_info;
if (@repo_dirs) {
my %seen;
( run in 1.059 second using v1.01-cache-2.11-cpan-39bf76dae61 )