chiark / gitweb /
dgit-repos-server: tests: no need for troot
[dgit.git] / dgit-repos-server
index 2cbb4e7d449469485db35fc828c494ccd38e3181..aaa754207ab91701fda9ba899bface80a25e1eb8 100755 (executable)
@@ -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$//;