master branch working convert-users-v3-to-v4.pl
authorDirk Koopman <djk@tobit.co.uk>
Wed, 20 May 2020 14:45:28 +0000 (15:45 +0100)
committerDirk Koopman <djk@tobit.co.uk>
Wed, 20 May 2020 14:45:28 +0000 (15:45 +0100)
perl/convert-users-v3-to-v4.pl

index 48ef0c00f7b8a4aeba3eb12605be482df3f820cf..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,9 +23,8 @@ 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);
@@ -75,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) {
@@ -105,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;
 }
 
@@ -141,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;
+}
+