+ rename "#commodmap#.tsv.tmp","#commodmap#.tsv" or die $!;
+}
+
+our %newcommods;
+
+sub read_newcommods ($) {
+ my ($file) = @_;
+ if (!open NC, "< $file") {
+ $!==&ENOENT or die $!;
+ return;
+ }
+ while (<NC>) {
+ chomp; s/^\s*//; s/\s+$//;
+ next if m/^\#/;
+ next unless m/\S/;
+ $newcommods{$_}= 1;
+ }
+ NC->error and die $!;
+ close NC or die $!;
+}
+
+sub refresh_newcommods() {
+ my $rsync= $ENV{'YPPSC_PCTB_RSYNC'};
+ $rsync= 'rsync' if !defined $rsync;
+
+ my $local= "#master-newcommods#.txt";
+ my $src= $ENV{'YPPSC_PCTB_DICT_UPDATE'};
+ if ($src) {
+ my $remote= "$src/master-newcommods.txt";
+ $!=0; system 'rsync','-Lt','--',$remote,$local;
+ die "$? $!" if $! or $?;
+ }
+ read_newcommods($local);
+ read_newcommods('#local-newcommods#.txt');