diff --git a/deep_fixitycheck.pl b/deep_fixitycheck.pl index 80b1096e20bc6a842eaa7cc621a28ba7de73c780..19341ea16eec67870570430707abe313e743cb3f 100644 --- a/deep_fixitycheck.pl +++ b/deep_fixitycheck.pl @@ -28,7 +28,7 @@ use XML::LibXML; use Time::Progress; use XML::LibXML::XPathContext; use Getopt::Long::Complete qw(GetOptionsWithCompletion); -use Digest::CRC; +use Crypt::Checksum::CRC32; use Digest::MD5; use Digest::SHA; use Bloom::Filter; @@ -263,7 +263,7 @@ sub check_file_fixities($$) { my $fileobj = shift; my $result = shift; my %digest_mapping = ( # maps Rosetta fixity algorithm names to Perl fixity algorithm names - 'CRC32' => Digest::CRC->new(type=>"crc32"), + 'CRC32' => Crypt::Checksum::CRC32->new(), 'MD5' => Digest::MD5->new(), 'SHA1' => Digest::SHA->new(1), 'SHA256' => Digest::SHA->new(256), @@ -370,9 +370,12 @@ sub stage2_for_ie { } } if ($ie_errors == 0) { - $report_path->append_utf8(" none\n"); + $report_path->append_utf8(" no fixity errors\n"); } # write report + + # return current bloom filter + return $bf; } sub stage2 ($$$$) { @@ -400,7 +403,6 @@ sub stage2 ($$$$) { $stat->{errors} = 0; $stat->{scansize} = 0; $stat->{begin} = time; - my $prev_ie = ""; $fh_unsorted_file = $tmp_ies_unsorted_path->openr(); while (<$fh_unsorted_file>) { chomp; @@ -411,7 +413,7 @@ sub stage2 ($$$$) { my $bfusage = int($bf->key_count() * 100 / $capacity); print $progressbar->report("parse IE files: %40b running: %L ETA: %E ($count/$cnt_unsorted_files IEs, tfr=$transferrate_in_MBs MB/s, bfu=$bfusage%) \r", ++$count); my $timestamp = strftime("%Y-%m-%d %H:%M:%S %z (%Z)", localtime(time)); - $report_path->append_utf8("$timestamp, IE $actual_ie with following errors:\n"); + $report_path->append_utf8("$timestamp, IE $actual_ie:\n"); if (! -f $actual_ie ) { $report_path->append_utf8("IE file does not exist (anymore)!"); $stat->{errors}++; @@ -430,10 +432,16 @@ sub stage2 ($$$$) { } my $ret = parse_iexml($actual_ie, $recovery); my $unseen = bloomfilter_to_unseen($bf, $ret->{files}); - if (scalar @{$unseen} == 0) {$report_path->append_utf8("skipped because files already checked using IE $prev_ie\n");} - $prev_ie = $actual_ie; + my ($fcount_all, $fcount_unseen) = (scalar @{$ret->{files}}, scalar @{$unseen}); + if ($fcount_unseen == 0) { + $report_path->append_utf8(" all files skipped because already checked\n"); + } + elsif ($fcount_all > $fcount_unseen) { + my $fdiff = $fcount_all - $fcount_unseen; + $report_path->append_utf8(" $fdiff of $fcount_all files skipped because already checked\n"); + } ### - stage2_for_ie($unseen, $bf, $map_path, $report_path, $stat); + $bf = stage2_for_ie($unseen, $bf, $map_path, $report_path, $stat); } say ""; $stat->{end} = time;