checker
changeset 10 fd5225120ee9
parent 9 70d578b200ba
child 11 675ef249d116
--- 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;