chiark / gitweb /
dgit git tags mention the distro explicitly; dgit-repos-server checks it
[dgit.git] / infra / dgit-repos-server
index c70bc27..7c447d2 100755 (executable)
@@ -2,7 +2,7 @@
 # dgit-repos-server
 #
 # usages:
-#  .../dgit-repos-server SUITES KEYRING-AUTH-SPEC DGIT-REPOS-DIR --ssh
+#  .../dgit-repos-server DISTRO SUITES KEYRING-AUTH-SPEC DGIT-REPOS-DIR --ssh
 # internal usage:
 #  .../dgit-repos-server --pre-receive-hook PACKAGE
 #
@@ -331,6 +331,18 @@ sub parsetag () {
     for (;;) {
        print PT or die $!;
        $!=0; $_=<T>; defined or die "missing signature? $!";
+       if (m/^\[dgit ([^"].*)\]$/) { # [dgit "something"] is for future
+           $_ = $1." ";
+           for (;;) {
+               if (s/^distro\=(\S+) //) {
+                   die "$1 != $distro" unless $1 eq $distro;
+               } elsif (s/^[-+.=0-9a-z]+ //) {
+               } else {
+                   die "unknown dgit info in tag";
+               }
+           }
+           next;
+       }
        last if m/^-----BEGIN PGP/;
     }
     for (;;) {
@@ -549,6 +561,7 @@ sub parseargsdispatch () {
        shift @ARGV;
        @ARGV == 1 or die;
        $package = shift @ARGV;
+       defined($distro = $ENV{'DGIT_DRS_DISTRO'}) 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;
@@ -564,6 +577,7 @@ sub parseargsdispatch () {
        exit 0;
     }
 
+    $ENV{'DGIT_DRS_DISTRO'} = argval();
     $ENV{'DGIT_DRS_SUITES'} = argval();
     $ENV{'DGIT_DRS_KEYRINGS'} = argval();
     $dgitrepos = argval();