return $fh;
}
+sub mkrepotmp () {
+ my $tmpdir = "$dgitrepos/_tmp";
+ return if mkdir $tmpdir;
+ return if $! == EEXIST;
+ die $!;
+}
+
sub reject ($) {
die "dgit-repos-server: reject: $_[0]\n";
}
#----- git-receive-pack -----
sub fixmissing__git_receive_pack () {
+ mkrepotmp();
$destrepo = "$dgitrepos/_tmp/${package}_prospective";
acquiretree($destrepo, 1);
my $r = system qw(cp -a --), "$dgitrepos/_template", "$destrepo";
}
sub makeworkingclone () {
+ mkrepotmp();
$workrepo = "$dgitrepos/_tmp/${package}_incoming$$";
acquiretree($workrepo, 1);
runcmd qw(git clone -l -q --mirror), $destrepo, $workrepo;
exec $0 --pre-receive-hook $package
END
close $fh or die "$prerecv: $!";
- $ENV{'DGIT_RPR_WORK'}= $workrepo;
- $ENV{'DGIT_RPR_DEST'}= $destrepo;
+ $ENV{'DGIT_DRS_WORK'}= $workrepo;
+ $ENV{'DGIT_DRS_DEST'}= $destrepo;
}
sub maybeinstallprospective () {
sub fixmissing__git_upload_pack () {
$destrepo = "$dgitrepos/_empty";
+ my $lfh = acquiretree($destrepo,1);
+ return if stat $destrepo;
+ die $! unless $!==ENOENT;
+ rmtree "$destrepo.new";
+ umask 022;
+ runcmd qw(git init --bare --quiet), "$destrepo.new";
+ rename "$destrepo.new", $destrepo or die $!;
+ unlink "$destrepo.lock" or die $!;
+ close $lfh;
}
sub main__git_upload_pack () {
shift @ARGV;
@ARGV == 1 or die;
$package = shift @ARGV;
- defined($suitesfile = $ENV{'DGIT_RPR_SUITES'}) or die;
- defined($workrepo = $ENV{'DGIT_RPR_WORK'}) or die;
- defined($destrepo = $ENV{'DGIT_RPR_DEST'}) or die;
- defined($keyrings = $ENV{'DGIT_RPR_KEYRINGS'}) or die $!;
+ defined($suitesfile = $ENV{'DGIT_DRS_SUITES'}) or die;
+ defined($workrepo = $ENV{'DGIT_DRS_WORK'}) or die;
+ defined($destrepo = $ENV{'DGIT_DRS_DEST'}) or die;
+ defined($keyrings = $ENV{'DGIT_DRS_KEYRINGS'}) or die $!;
open STDOUT, ">&STDERR" or die $!;
stunthook();
exit 0;
}
- $ENV{'DGIT_RPR_SUITES'} = argval();
- $ENV{'DGIT_RPR_KEYRINGS'} = argval();
+ $ENV{'DGIT_DRS_SUITES'} = argval();
+ $ENV{'DGIT_DRS_KEYRINGS'} = argval();
$dgitrepos = argval();
die unless @ARGV==1 && $ARGV[0] eq '--ssh';
sub cleanup () {
unlockall();
- chdir "$dgitrepos/_tmp" or die $!;
+ if (!chdir "$dgitrepos/_tmp") {
+ $!==ENOENT or die $!;
+ return;
+ }
foreach my $lf (<*.lock>) {
my $tree = $lf;
$tree =~ s/\.lock$//;