chiark / gitweb /
Merge branch 'stable-3.x'
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Thu, 10 Sep 2009 18:50:06 +0000 (19:50 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Thu, 10 Sep 2009 18:50:06 +0000 (19:50 +0100)
1  2 
yarrg/Commods.pm

diff --combined yarrg/Commods.pm
index 44cc74e8543b91b885ee76082cb3ea0042d5f3fd,b58471ce43a9370a74aa8a6ec8eb11f51822ff62..9c8281876f334b99578e73622cf95f00e9ec6259
@@@ -35,8 -35,7 +35,8 @@@ BEGIN 
      @ISA         = qw(Exporter);
      @EXPORT      = qw(&parse_info_clientside &fetch_with_rsync
                      &parse_info_serverside &parse_info_serverside_ocean
 -                    %oceans %commods %clients %routes %route_mysteries
 +                    %oceans %commods %clients
 +                    %vessels %shotname2damage
                      &parse_pctb_commodmap %pctb_commodmap @pctb_commodmap
                      &get_our_version &check_tsv_line
                      &pipethrough_prep &pipethrough_run
@@@ -53,10 -52,8 +53,10 @@@ our $masterinfoversion= 2; # version w
  
  our %oceans; # eg $oceans{'Midnight'}{'Ruby'}{'Eta Island'}= $sources;
  our %clients; # eg $clients{'ypp-sc-tools'}= [ qw(last-page) ];
 -our %routes; # eg $routes{'Midnight'}{'Orca'}{'Tinga'}= $sources  NB abbrevs!
 -our %route_mysteries; # eg $route_mysteries{'Midnight'}{'Norse'}= 3
 +our %vessels; # eg $vessels{'War Brig'}{Shot}='medium'
 +              #    $vessels{'War Brig'}{Volume}= 81000
 +              #    $vessels{'War Brig'}{Mass}= 54000
 +our %shotname2damage; # eg $shotname2damage{'medium'}= 3;
  # $sources = 's[l]b';
  #       's' = Special Circumstances; 'l' = local ; B = with Bleach
  
@@@ -74,9 -71,13 +74,13 @@@ my (@rawcm, @nocm); # eg $rawcm[0]='fin
  #  when extending the format of source-info in a non-backward
  #  compatible way, be sure to update update-master-info too.
  
- sub parse_info1 ($$) {
-     my ($mmfn,$src)= @_;
-     my $mm= new IO::File $mmfn, 'r' or die "$mmfn $!";
+ sub parse_info1 ($$$) {
+     my ($mmfn,$src,$enoentok)= @_;
+     my $mm= new IO::File $mmfn, 'r';
+     if (!$mm) {
+       return if $enoentok && $!==&ENOENT;
+       die "$mmfn $!";
+     }
      my @ctx= ();
      while (<$mm>) {
        next if m/^\s*\#/;
                    $oceans{$ocean}{$arch}{$_} .= $src;
                };
            });
 -      } elsif (m/^routes (\w+)$/) {
 -          my $ocean= $1;
 +      } elsif (m/^vessels$/) {
 +          @ctx= (sub {
 +              return if m/^[-+|]+$/;
 +              m/^ \| \s* ([A-Z][a-z\ ]+[a-z]) \s*
 +                  \| \s* (small|medium|large) \s*
 +                  \| \s* ([1-9][0-9,]+) \s*
 +                  \| \s* ([1-9][0-9,]+) \s*
 +                  \| $/x
 +                  or die;
 +              my $name= $1;
 +              my $v= { Shot => $2, Volume => $3, Mass => $4 };
 +              foreach my $vm (qw(Volume Mass)) { $v->{$vm} =~ s/,//g; }
 +              $vessels{$name}= $v;
 +          });
 +      } elsif (m/^shot$/) {
            @ctx= (sub {
 -              m/^(\S[^\t]*\S),\s*(\S[^\t]*\S),\s*([1-9][0-9]{0,2})$/ or die;
 -              $routes{$ocean}{$1}{$2}= $3;
 +              m/^ ([a-z]+) \s+ (\d+) $/x or die;
 +              $shotname2damage{$1}= $2;
            });
        } elsif (m/^client (\S+.*\S)$/) {
            my $client= $1;
        }
      };
      foreach (@rawcm) { &$ca($_,$src); }
 -
 -    foreach my $on (keys %routes) {
 -      my $routes= $routes{$on};
 -      my $ocean= $oceans{$on};
 -      die unless defined $ocean;
 -      
 -      my @allislands;
 -      foreach my $an (sort keys %$ocean) {
 -          my $arch= $ocean->{$an};
 -          push @allislands, sort keys %$arch;
 -      }
 -      parse_info_maproutes($on, \@allislands, $routes);
 -      foreach my $route (values %$routes) {
 -          parse_info_maproutes($on, \@allislands, $route);
 -      }
 -    }
  }
  
  sub parse_info_clientside () {
-     my $yarrg= $ENV{'YPPSC_YARRG_DICT_UPDATE'};
-     return unless $yarrg;
-     my $master= fetch_with_rsync("info-$masterinfoversion");
-     parse_info1($master,'s');
-     my $local= '_local-info.txt';
-     if (stat $local) {
-       parse_info1($local,'s');
-     } else {
-       die "$local $!" unless $! == &ENOENT;
-     }
+     my $master= fetch_with_rsync("info-v$masterinfoversion");
+     parse_info1($master,'s',1);
+     parse_info1('_local-info.txt','s',1);
  }
  
  sub fetch_with_rsync ($) {
      return $local;
  }
  
 -sub parse_info_maproutes ($$$) {
 -    my ($on, $allislands, $routemap) = @_;;
 -    foreach my $k (sort keys %$routemap) {
 -      my @ok= grep { index($_,$k) >= 0 } @$allislands;
 -      die "ambiguous $k" if @ok>1;
 -      if (!@ok) {
 -          $route_mysteries{$on}{$k}++;
 -          delete $routemap->{$k};
 -      } elsif ($ok[0] ne $k) {
 -          $routemap->{$ok[0]}= $routemap->{$k};
 -          delete $routemap->{$k};
 -      }
 -    }
 -}
 -
  sub parse_info_serverside () {
-     parse_info1('source-info.txt','s');
+     parse_info1('source-info.txt','s',0);
  }
  sub parse_info_serverside_ocean ($) {
      my ($oceanname) = @_;
      die "unknown ocean $oceanname ?" unless exists $oceans{$oceanname};
-     parse_info1("_ocean-".(lc $oceanname).".txt",'s');
+     parse_info1("_ocean-".(lc $oceanname).".txt", 's',0);
  }
  
  sub parse_pctb_commodmap () {
@@@ -236,7 -248,14 +233,14 @@@ sub get_our_version ($$) 
      $aref->{"${prefix}name"}= 'ypp-sc-tools yarrg';
      $aref->{"${prefix}fixes"}= 'lastpage checkpager';
  
-     my $version= `git-describe --tags HEAD || echo 0unknown`; $? and die $?;
+     my $version= `
+       if type -p git-describe >/dev/null 2>&1; then
+               gd=git-describe
+       else
+               gd="git describe"
+       fi
+       \$gd --tags HEAD || echo 0unknown
+     `; $? and die $?;
      chomp($version);
      $aref->{"${prefix}version"}= $version;
      return $aref;