X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit-repos-server;h=aaa754207ab91701fda9ba899bface80a25e1eb8;hp=2cbb4e7d449469485db35fc828c494ccd38e3181;hb=2b475587b57da40b8992aa5f54fa1ca49cd66874;hpb=827088d1ff85113db9528f3ed55972b68cb2f540 diff --git a/dgit-repos-server b/dgit-repos-server index 2cbb4e7d..aaa75420 100755 --- a/dgit-repos-server +++ b/dgit-repos-server @@ -133,6 +133,13 @@ sub acquiretree ($$) { 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"; } @@ -146,6 +153,7 @@ sub runcmd { #----- 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"; @@ -153,6 +161,7 @@ sub fixmissing__git_receive_pack () { } sub makeworkingclone () { + mkrepotmp(); $workrepo = "$dgitrepos/_tmp/${package}_incoming$$"; acquiretree($workrepo, 1); runcmd qw(git clone -l -q --mirror), $destrepo, $workrepo; @@ -487,7 +496,10 @@ sub unlockall () { 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$//;