request Biblio::Isis 0.24 to ignore empty subfields
[webpac2] / run.pl
diff --git a/run.pl b/run.pl
index 118215f..08552ed 100755 (executable)
--- a/run.pl
+++ b/run.pl
@@ -8,7 +8,7 @@ use lib './lib';
 
 use WebPAC::Common 0.02;
 use WebPAC::Parser 0.08;
-use WebPAC::Input 0.14;
+use WebPAC::Input 0.16;
 use WebPAC::Store 0.14;
 use WebPAC::Normalize 0.22;
 use WebPAC::Output::TT;
@@ -21,6 +21,7 @@ use Time::HiRes qw/time/;
 use File::Slurp;
 use Data::Dump qw/dump/;
 use Storable qw/dclone/;
+use Pod::Usage qw/pod2usage/;
 
 use Proc::Queue size => 1;
 use POSIX ":sys_wait_h"; # imports WNOHANG
@@ -31,7 +32,7 @@ run.pl - start WebPAC indexing
 
 B<this command will probably go away. Don't get used to it!>
 
-Options:
+=head1 OPTIONS
 
 =over 4
 
@@ -67,6 +68,11 @@ and subfield usage for each input
 
 turn on extra validation of imput records, see L<WebPAC::Validation>
 
+=item --marc-generate
+
+Generate MARC file. This will automatically be on if file contains C<marc*> directives.
+You can use this option as C<--no-marc-generate> to disable MARC generation.
+
 =item --marc-lint
 
 By default turned on if normalisation file has C<marc*> directives. You can disable lint
@@ -102,11 +108,13 @@ my $debug = 0;
 my $only_filter;
 my $stats = 0;
 my $validate_path;
+my $marc_generate = 1;
 my $marc_lint = 1;
 my $marc_dump = 0;
 my $parallel = 0;
 my $only_links = 0;
 my $merge = 0;
+my $help;
 
 my $log = _new WebPAC::Common()->_get_logger();
 
@@ -120,13 +128,17 @@ GetOptions(
        "debug+" => \$debug,
        "stats" => \$stats,
        "validate=s" => \$validate_path,
+       "marc-generate!" => \$marc_generate,
        "marc-lint!" => \$marc_lint,
        "marc-dump!" => \$marc_dump,
        "parallel=i" => \$parallel,
        "only-links!" => \$only_links,
        "merge" => \$merge,
+       "help" => \$help,
 );
 
+pod2usage(-verbose => 2) if ($help);
+
 my $config = new WebPAC::Config( path => $config_path );
 
 #print "config = ",dump($config) if ($debug);
@@ -135,6 +147,12 @@ die "no databases in config file!\n" unless ($config->databases);
 
 $log->info( "-" x 79 );
 
+my $log_file = 'log';
+
+if (-e $log_file ) {   # && -s $log_file > 5 * 1024 * 1024) {
+       $log->info("moved old log with ", -s $log_file, " bytes to '${log_file}.old'");
+       rename $log_file, "${log_file}.old" || $log->logwarn("can't rename $log_file to ${log_file}.old: $!");
+}
 
 my $estcmd_fh;
 my $estcmd_path = './estcmd-merge.sh';
@@ -153,8 +171,9 @@ $validate = new WebPAC::Validate(
 
 
 my $use_indexer = $config->use_indexer;
+$stats ||= $validate;
 if ($stats) {
-       $log->debug("option --stats disables update of indexing engine...");
+       $log->debug("disabled indexing for stats collection");
        $use_indexer = undef;
 } else {
        $log->info("using $use_indexer indexing engine...");
@@ -396,7 +415,7 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
                my $lookup_data = WebPAC::Normalize::_get_lookup();
 
                if (defined( $lookup_data->{$database}->{$input_name} )) {
-                       $log->debug("created following lookups: ", dump( $lookup_data ));
+                       $log->debug("created following lookups: ", sub { dump( $lookup_data ) } );
 
                        foreach my $key (keys %{ $lookup_data->{$database}->{$input_name} }) {
                                $store->save_lookup(
@@ -419,7 +438,7 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
                }
 
                my $marc;
-               if ($parser->have_rules( 'marc', $database, $input_name )) {
+               if ($marc_generate && $parser->have_rules( 'marc', $database, $input_name )) {
                        $marc = new WebPAC::Output::MARC(
                                path => "out/marc/${database}-${input_name}.marc",
                                lint => $marc_lint,
@@ -467,6 +486,8 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
 
                        my $row = $input_db->fetch || next;
 
+                       $total_rows++;
+
                        my $mfn = $row->{'000'}->[0];
 
                        if (! $mfn || $mfn !~ m#^\d+$#) {
@@ -477,11 +498,12 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
 
 
                        if ($validate) {
-                               if ( my $errors = $validate->validate_errors( $row, $input_db->dump ) ) {
+                               if ( my $errors = $validate->validate_rec( $row, $input_db->dump_ascii ) ) {
                                        $log->error( "MFN $mfn validation error:\n",
                                                $validate->report_error( $errors )
                                        );
                                }
+                               next;   # validation doesn't create any output
                        }
 
                        my $ds = WebPAC::Normalize::data_structure(
@@ -500,7 +522,7 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
                                },
                        );
 
-                       $log->debug("ds = ",dump($ds)) if ($ds);
+                       $log->debug("ds = ", sub { dump($ds) }) if ($ds);
 
                        $store->save_ds(
                                database => $database,
@@ -522,7 +544,7 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
                                        $marc->add(
                                                id => $mfn . ( $i ? "/$i" : '' ),
                                                fields => $fields,
-                                               leader => WebPAC::Normalize::marc_leader(),
+                                               leader => WebPAC::Normalize::_get_marc_leader(),
                                                row => $row,
                                        );
                                        $i++;
@@ -530,8 +552,6 @@ while (my ($database, $db_config) = each %{ $config->databases }) {
 
                                $log->info("Created $i instances of MFN $mfn\n") if ($i > 1);
                        }
-
-                       $total_rows++;
                }
 
                if ($validate) {