chiark / gitweb /
WIP commod-update-receiver
[ypp-sc-tools.web-live.git] / pctb / Commods.pm
index dee9fbe..d59529b 100644 (file)
@@ -1,5 +1,6 @@
 
 package Commods;
+use IO::File;
 
 use strict;
 use warnings;
@@ -9,17 +10,21 @@ BEGIN {
     our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
     $VERSION     = 1.00;
     @ISA         = qw(Exporter);
-    @EXPORT      = qw(%oceans %commods &parse_masters);
+    @EXPORT      = qw(&parse_masters %oceans %commods %clients
+                     &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 %clients; # eg $clients{'ypp-sc-tools'}= [ qw(last-page) ];
 # $sources = 's[l]b';
 #       's' = Special Circumstances; 'l' = local ; B = with Bleach
 
+our (%pctb_commodmap,@pctb_commodmap);
+
 my %colours; # eg $colours{'c'}{'black'}= $sources
 my @rawcm; # eg $rawcm[0]='fine rum'; $rawcm[1]='fine %c cloth'
 
@@ -46,6 +51,13 @@ sub parse_master_master1 ($$) {
                    $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];
@@ -78,4 +90,22 @@ sub parse_masters () {
     parse_master_master1('master-master.txt','s');
 }
 
+sub parse_pctb_commodmap () {
+    undef %pctb_commodmap;
+    foreach my $commod (keys %commods) { $commods{$commod} =~ s/b//; }
+
+    my $c= new IO::File '_commodmap.tsv' or die $!;
+    if (!$c) { $!==&ENOENT or die $!; return 0; }
+
+    while (<$c>) {
+       m/^(\S.*\S)\t(\d+)\n$/ or die "$_";
+       die if defined $pctb_commodmap{$1};  $pctb_commodmap{$1}= $2;
+       die if defined $pctb_commodmap[$2];  $pctb_commodmap[$2]= $1;
+       $commods{$1} .= 'b';
+    }
+    $c->error and die $!;
+    close $c or die $!;
+    return 1;
+}
+
 1;