diff -r 70d578b200ba -r fd5225120ee9 checker --- 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;