chiark / gitweb /
dgit-repos-server: parsetag_general: Switch to $distrofn
[dgit.git] / infra / dgit-repos-server
index ee4d5c52db3d2c4fa0f35ae5a5294d602d6e6585..eea5d94fc7a465c3ffa4f43c8813a00aed403ae4 100755 (executable)
@@ -552,9 +552,9 @@ sub readupdates () {
     printdebug " updates ok.\n";
 }
 
-sub parsetag_general ($$;$) {
-    my ($mainfn, $dgititemfn, $need_distro) = @_;
-    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,8 +570,11 @@ sub parsetag_general ($$;$) {
        }
     }
     $!=0; $_=<T>; defined or die $!;
+}
 
-    $mainfn->();
+sub parsetag_general ($$) {
+    my ($dgititemfn, $distrofn) = @_;
+    printdebug " parsetag...\n";
 
     my $copyl = $_;
     for (;;) {
@@ -583,8 +586,7 @@ sub parsetag_general ($$;$) {
            while (length) {
                if ($dgititemfn->()) {
                } elsif (s/^distro\=(\S+) //) {
-                   die "$1 != $distro" unless $1 eq $distro;
-                   $need_distro = 0;
+                   $distrofn->($1);
                } elsif (s/^[-+.=0-9a-z]\S* //) {
                } else {
                    die "unknown dgit info in tag ($_)";
@@ -594,7 +596,6 @@ sub parsetag_general ($$;$) {
        }
        last if m/^-----BEGIN PGP/;
     }
-    reject "need distro info in tag" if $need_distro;
 
     $_ = $copyl;
     for (;;) {
@@ -609,13 +610,14 @@ sub parsetag_general ($$;$) {
 }
 
 sub parsetag () {
+    readtag();
+    m/^($package_re) release (\S+) for \S+ \((\S+)\) \[dgit\]$/ or
+       reject "tag message not in expected format";
+    die unless $1 eq $package;
+    $version = $2;
+    die "$3 != $suite " unless $3 eq $suite;
+
     parsetag_general sub {
-       m/^($package_re) release (\S+) for \S+ \((\S+)\) \[dgit\]$/ or
-           reject "tag message not in expected format";
-       die unless $1 eq $package;
-       $version = $2;
-       die "$3 != $suite " unless $3 eq $suite;
-    }, sub {
        if (s/^(--deliberately-$deliberately_re) //) {
            push @deliberatelies, $1;
        } elsif (s/^previously:(\S+)=(\w+) //) {
@@ -625,6 +627,9 @@ sub parsetag () {
            return 0;
        }
        return 1;
+    }, sub {
+       my ($gotdistro) = @_;
+       die "$gotdistro != $distro" unless $gotdistro eq $distro;
     };
 }