chiark / gitweb /
dgit-repos-server: Break out readtag
[dgit.git] / infra / dgit-repos-server
index 7b8849a85cfb3162731efc0c469a6f9496da1643..21a8024ad56037dfbac6e9bc638d2e3cbfec7580 100755 (executable)
@@ -552,9 +552,9 @@ sub readupdates () {
     printdebug " updates ok.\n";
 }
 
-sub parsetag_general ($$) {
-    my ($mainfn, $dgititemfn) = @_;
-    printdebug " parsetag...\n";
+sub readtag () {
+    printdebug " readtag...\n";
+
     open PT, ">dgit-tmp/plaintext" or die $!;
     open DS, ">dgit-tmp/plaintext.asc" or die $!;
     open T, "-|", qw(git cat-file tag), $tagval or die $!;
@@ -570,7 +570,13 @@ sub parsetag_general ($$) {
        }
     }
     $!=0; $_=<T>; defined or die $!;
+}
 
+sub parsetag_general ($$;$) {
+    my ($mainfn, $dgititemfn, $need_distro) = @_;
+    printdebug " parsetag...\n";
+
+    readtag();
     $mainfn->();
 
     my $copyl = $_;
@@ -584,6 +590,7 @@ sub parsetag_general ($$) {
                if ($dgititemfn->()) {
                } elsif (s/^distro\=(\S+) //) {
                    die "$1 != $distro" unless $1 eq $distro;
+                   $need_distro = 0;
                } elsif (s/^[-+.=0-9a-z]\S* //) {
                } else {
                    die "unknown dgit info in tag ($_)";
@@ -593,6 +600,8 @@ sub parsetag_general ($$) {
        }
        last if m/^-----BEGIN PGP/;
     }
+    reject "need distro info in tag" if $need_distro;
+
     $_ = $copyl;
     for (;;) {
        print DS or die $!;