chiark / gitweb /
dgit-repos-server: break out mkemptyrepo
[dgit.git] / infra / dgit-repos-server
index 8162fa109cab65e8c66fe2afb8be89ee7b5d7c35..9a66bdbd4b8a5cf5d095bada9792bf9e69d65466 100755 (executable)
@@ -87,9 +87,9 @@ use POSIX;
 use Fcntl qw(:flock);
 use File::Path qw(rmtree);
 
-open DEBUG, ">/dev/null" or die $!;
+use Debian::Dgit qw(:DEFAULT :policyflags);
 
-our $package_re = '[0-9a-z][-+.0-9a-z]+';
+open DEBUG, ">/dev/null" or die $!;
 
 our $func;
 our $dgitrepos;
@@ -200,6 +200,11 @@ sub policyhook {
     return $r >> 8;
 }
 
+sub mkemptyrepo ($$) {
+    my ($dir,$sharedperm) = @_;
+    runcmd qw(git init --bare --quiet), "--shared=$sharedperm", $dir;
+}
+
 #----- git-receive-pack -----
 
 sub fixmissing__git_receive_pack () {
@@ -504,7 +509,7 @@ sub checks () {
     debug "translated version $v";
     $tagname eq "debian/$v" or die;
 
-    my ($policy) = policyhook(2,'push',$package,
+    my ($policy) = policyhook(NOFFCHECK, 'push',$package,
                              $version,$suite,$tagname,
                              join(",",@delberatelies));
 
@@ -512,7 +517,7 @@ sub checks () {
 
     # check that our ref is being fast-forwarded
     debug "oldcommit $oldcommit";
-    if (!($policy & 2) && $oldcommit =~ m/[^0]/) {
+    if (!($policy & NOFFCHECK) && $oldcommit =~ m/[^0]/) {
        $?=0; $!=0; my $mb = `git merge-base $commit $oldcommit`;
        chomp $mb;
        $mb eq $oldcommit or reject "not fast forward on dgit branch";
@@ -549,8 +554,7 @@ sub fixmissing__git_upload_pack () {
     return if stat $destrepo;
     die $! unless $!==ENOENT;
     rmtree "$destrepo.new";
-    umask 022;
-    runcmd qw(git init --bare --quiet), "$destrepo.new";
+    mkemptyrepo "$destrepo.new", "0644";
     rename "$destrepo.new", $destrepo or die $!;
     unlink "$destrepo.lock" or die $!;
     close $lfh;
@@ -631,8 +635,8 @@ sub parseargsdispatch () {
 
     reject "unknown method" unless $mainfunc;
 
-    my ($policy, $pollock) = policyhook(4, 'check-package',$package);
-    if ($policy & 4) {
+    my ($policy, $pollock) = policyhook(FRESHREPO,'check-package',$package);
+    if ($policy & FRESHREPO) {
        my $garbagerepo = "$dgitrepos/_tmp/${package}_garbage";
        acquiretree($garbagerepo,1);
        rmtree $garbagerepo;