remove change line about checking cmdlneie
[spider.git] / perl / convert-users-v3-to-v4.pl
index f8ac9bf42894827bad56d117a092eb134c3a60de..43489a7c3a2fc5c5c61af9716092477a1d07ba37 100755 (executable)
@@ -11,6 +11,8 @@
 
 # make sure that modules are searched in the order local then perl
 
+our $root;
+
 BEGIN {
        # root of directory tree for this system
        $root = "/spider"; 
@@ -21,13 +23,13 @@ BEGIN {
 
 use strict;
 
-use SysVar;
+use DXVars;
 use DXUser;
-use DXUtil;
 use JSON;
 use Data::Structure::Util qw(unbless);
 use Time::HiRes qw(gettimeofday tv_interval);
 use IO::File;
+use File::Copy;
 use Carp;
 use DB_File;
 
@@ -64,7 +66,8 @@ if (-e $ofn || -e "$ofn.n") {
        say "You appear to have (or are using) $ofn, creating $nfn instead";
        $ofn = $nfn;
 } else {
-   say "using $ofn for output";
+       $ofn = "$ofn.n";
+       say "using $ofn.n for output";
 }
 
 
@@ -73,11 +76,12 @@ if ($convert) {
        my ($key, $val, $action, $count, $err) = ('','',0,0,0);
        my $ta = [gettimeofday];
        my $ofh = IO::File->new(">$ofn") or die "cannot open $ofn ($!)\n";
-               
+       my $oldfn = localdata("users.v$convert");
+                       
        my %oldu;
        LogDbg('',"Converting the User File from V$convert to $fn.v4 ");
        LogDbg('',"This will take a while, maybe as much as 10 secs");
-       my $odbm = tie (%oldu, 'DB_File', localdata("users.v$convert"), O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $fn.v$convert ($!) [rebuild it from user_asc?]";
+       my $odbm = tie (%oldu, 'DB_File', $oldfn, O_RDONLY, 0666, $DB_BTREE) or confess "can't open user file: $oldfn ($!) [rebuild it from user_asc?]";
        for ($action = R_FIRST; !$odbm->seq($key, $val, $action); $action = R_NEXT) {
                my $ref;
                if ($convert == 3) {
@@ -89,7 +93,7 @@ if ($convert) {
                unless ($@) {
                        if ($ref) {
                                unbless $ref;
-                               $ofh->print($json->encode($ref) . "\n");
+                               $ofh->print("$ref->{call}\t" . $json->encode($ref) . "\n");
                                $count++;
                        }
                        else {
@@ -103,7 +107,7 @@ if ($convert) {
        undef $odbm;
        untie %oldu;
        my $t = _diffms($ta);
-       LogDbg('',"Conversion from users.v$convert to $ofn completed $count records $err errors $t mS");
+       LogDbg('',"Conversion from $oldfn to $ofn completed $count records $err errors $t mS");
        $ofh->close;
 }
 
@@ -139,3 +143,35 @@ sub Log
 {
        say shift;
 }
+
+# find the correct local_data directory
+# basically, if there is a local_data directory with this filename and it is younger than the
+# equivalent one in the (system) data directory then return that name rather than the system one
+sub localdata
+{
+       my $ifn = shift;
+       my $ofn = "$root/local_data/$ifn";
+       my $tfn;
+        
+       if (-e "$root/local_data") {
+               $tfn = "$main::data/$ifn";
+               if ((-e $tfn) && (-e $ofn)) {
+                       $ofn = $tfn if -M $ofn < -M $tfn;
+               }
+               else {
+                       $ofn = $tfn if -e $tfn;
+               }
+       }
+
+       return $ofn;
+}
+# measure the time taken for something to happen; use Time::HiRes qw(gettimeofday tv_interval);
+sub _diffms
+{
+    my $ta = shift;
+    my $tb = shift || [gettimeofday];
+    my $a = int($ta->[0] * 1000) + int($ta->[1] / 1000);
+    my $b = int($tb->[0] * 1000) + int($tb->[1] / 1000);
+    return $b - $a;
+}
+