--- a/checker Mon Jul 25 11:59:05 2011 +0200
+++ b/checker Mon Jul 25 15:13:07 2011 +0200
@@ -43,8 +43,8 @@
my %block = get_block_list($dir);
verbose("# indexed: "
- . scalar(@{$block{".idx"}//[]}) . " images with "
- . (grep /^\.idx/ => keys(%block) - 1)." files");
+ . scalar(@{$block{""}//[]}) . " images with "
+ . (grep !/^\.idx$/ => keys(%block))." blocks");
purge_unused($dir => %block);
check_images($dir => %block);
@@ -69,9 +69,9 @@
find(sub {
(-f) and (-M > 0) or return;
#verbose("idx: $File::Find::name");
- push @{$block{".idx"}}, abs_path $_;
+ push @{$block{""}}, abs_path $_;
foreach my $f (get_file_list($_)) {
- push @{$block{$f}} => $#{$block{".idx"}};
+ push @{$block{$f}} => $#{$block{""}};
}
}, "$dir/idx");
return %block;
@@ -81,6 +81,7 @@
my ($dir, %block) = @_;
my ($total, $done);
+ verbose("# pass 1 - purge unused blocks");
# calculate the number of files we expect
find(sub {
@@ -95,7 +96,7 @@
local $SIG{ALRM} = sub {
return alarm 1 if not $done;
my $speed = $done / (time - $^T + 1);
- verbose sprintf "# done %5.1f%% | %25s (%*d of %d files)",
+ verbose sprintf "# pass 1 done %5.1f%% | %25s (%*d of %d blocks)",
100 * ($done/$total),
scalar(localtime($^T + $speed * ($total - $done))),
length($total) => $done,
@@ -113,13 +114,14 @@
(my $rn = $File::Find::name) =~ s/^$dir\/data\/(.*?)(?:\..+)?$/$1/;
exists $block{$rn} and return;
+
if ($o{yes}) {
- verbose("unlinking abs_path $File::Find::name");
- unlink abs_path $File::Find::name;
- return;
+ verbose("unlinking " . abs_path $File::Find::name);
+ unlink abs_path $File::Find::name;
+ return;
}
- verbose("unused abs_path $File::Find::name");
+ verbose("unused " . abs_path $File::Find::name);
return;
}, "$dir/data");
@@ -131,14 +133,16 @@
sub check_images {
my ($dir, %block) = @_;
- my $total = keys(%block) - 1; # .idx
+ my $total = grep { $_ ne "" } keys(%block);
my $done = 0;
+ verbose("# pass 2 - check image completness");
+
# progress
local $SIG{ALRM} = sub {
return alarm 1 if not $done;
my $speed = $done / (time - $^T + 1);
- say sprintf "# done %5.1f%% | %25s (%*d of %d files)",
+ verbose sprintf "# pass 2 done %5.1f%% | %25s (%*d of %d blocks)",
100 * $done/$total,
scalar(localtime($^T + ($total - $done) * $speed)),
length($total) => $done,
@@ -150,13 +154,13 @@
my %invalid;
foreach my $k (keys %block) {
my $i = $block{$k};
- next if $k eq ".idx";
+ next if $k eq "";
++$done;
next if -f "$dir/data/$k"
or -f "$dir/data/$k.gz";
say "missing $k";
- @invalid{@{$block{".idx"}}} = ();
+ @invalid{@{$block{""}}} = ();
}
$SIG{ALRM}->();
alarm 0;