chiark / gitweb /
WIP commod-update-receiver
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Mon, 20 Jul 2009 02:30:36 +0000 (03:30 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Mon, 20 Jul 2009 02:30:36 +0000 (03:30 +0100)
pctb/Commods.pm
pctb/commod-update-receiver
pctb/master-master.txt

index 6f3a177..d59529b 100644 (file)
@@ -10,15 +10,16 @@ BEGIN {
     our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
     our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
-    @EXPORT      = qw(&parse_masters %oceans %commods
+    @EXPORT      = qw(&parse_masters %oceans %commods %clients
                      &parse_pctb_commodmap %pctb_commodmap @pctb_commodmap);
     %EXPORT_TAGS = ( );
 
     @EXPORT_OK   = qw();
 }
 
                      &parse_pctb_commodmap %pctb_commodmap @pctb_commodmap);
     %EXPORT_TAGS = ( );
 
     @EXPORT_OK   = qw();
 }
 
-our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources
+our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources;
 our %commods; # eg $commods{'Fine black cloth'}= $sources;
 our %commods; # eg $commods{'Fine black cloth'}= $sources;
+our %clients; # eg $clients{'ypp-sc-tools'}= [ qw(last-page) ];
 # $sources = 's[l]b';
 #       's' = Special Circumstances; 'l' = local ; B = with Bleach
 
 # $sources = 's[l]b';
 #       's' = Special Circumstances; 'l' = local ; B = with Bleach
 
@@ -50,6 +51,13 @@ sub parse_master_master1 ($$) {
                    $oceans{$ocean}{$arch}{$_} .= $src;
                };
            });
                    $oceans{$ocean}{$arch}{$_} .= $src;
                };
            });
+       } elsif (m/^client (\S+)$/) {
+           my $client= $1;
+           $clients{$client}= [ ];
+           @ctx= (sub {
+               my $bug= $_;
+               push @{ $clients{$client} }, $bug;
+           });
        } elsif (s/^ +//) {
            my $indent= length $&;
            die "wrong indent $indent" unless defined $ctx[$indent-1];
        } elsif (s/^ +//) {
            my $indent= length $&;
            die "wrong indent $indent" unless defined $ctx[$indent-1];
index 531ff1a..ff28fbb 100755 (executable)
@@ -37,6 +37,8 @@
 use strict (qw(vars));
 use POSIX;
 
 use strict (qw(vars));
 use POSIX;
 
+use Commods;
+
 $CGI::POST_MAX= 3*1024*1024;
 $CGI::DISABLE_UPLOADS= 1;
 
 $CGI::POST_MAX= 3*1024*1024;
 $CGI::DISABLE_UPLOADS= 1;
 
@@ -44,3 +46,56 @@ use CGI qw/:standard -private_tempfiles/;
 
 setlocale(LC_CTYPE, "en_GB.UTF-8");
 
 
 setlocale(LC_CTYPE, "en_GB.UTF-8");
 
+my $re_any= "^(.*)\$";
+
+parse_masters();
+
+sub fail ($) {
+    my ($msg) = @_;
+    print header(-status=>'400 Bad commodity update',
+                -type=>'text/plain',
+                -charset=>'us-ascii');
+    print "Error: $msg\n";
+    exit 0;
+}
+
+sub must_param ($$) {
+    my ($n,$re)= @_;
+    my $v= param($n);
+    fail("missing form parameter $n") unless defined $v;
+    fail("invalid form parameter $n") unless $v =~ m/$re/;
+    return $1;
+}
+
+my $clientname= must_param('clientname',$re_any);
+my $client= $clients{$clientname};
+fail('unknown client') unless defined $client;
+
+my $clientfixes= must_param('clientfixes', $re_any);
+foreach my $bug (@$client) {
+    fail("client out of date - missing bugfix \`$bug'")
+       unless grep { $_ eq $bug } split /\s+/, $clientfixes;
+}
+
+my $cversion= must_param('clientversion', "^(\\d[-+._0-9a-zA-Z]+)\$");
+
+my $ocean= must_param('ocean', $re_any);
+my $island= must_param('island', $re_any);
+
+my $arches= $oceans{$ocean};
+fail("unknown ocean") unless $arches;
+
+my $island_found= 0;
+foreach my $islands (values %$arches) {
+    my $sources= $islands->{$island};
+    next unless $sources;
+    die if $island_found;
+    $island_found= $sources;
+}
+fail("unknown island") unless $island_found;
+
+#foreach my $commod (sort keys %commods) {
+#    print "$commod\n";
+#}
+#STDOUT->error and die $!;
+#close STDOUT or die $!;
index b1fe2df..f5087ca 100644 (file)
@@ -163,3 +163,6 @@ ocean Midnight
   Iris Island
   Remora Island
   Vernal Equinox
   Iris Island
   Remora Island
   Vernal Equinox
+
+client ypp-sc-tools
+ lastpage