From c4fd691793a8f25035fecd542b0e51208b11bf66 Mon Sep 17 00:00:00 2001 From: Dirk Koopman Date: Wed, 20 May 2020 15:45:28 +0100 Subject: [PATCH] master branch working convert-users-v3-to-v4.pl --- perl/convert-users-v3-to-v4.pl | 44 ++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/perl/convert-users-v3-to-v4.pl b/perl/convert-users-v3-to-v4.pl index 48ef0c00..43489a7c 100755 --- a/perl/convert-users-v3-to-v4.pl +++ b/perl/convert-users-v3-to-v4.pl @@ -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; +} + -- 2.34.1