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;
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 () {
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$//;