From d496945ea0a89570ed49bb8b9ce608036bf986a0 Mon Sep 17 00:00:00 2001 From: "Andreas J. Koenig" Date: Sat, 11 Oct 2008 10:13:30 +0200 Subject: [PATCH] switch from perl array to Pairwise array prevent falling into counting traps --- Makefile.PL | 1 + Todo | 4 ++++ lib/File/Rsync/Mirror/Recent.pm | 41 ++++++++++++++++++++--------------------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index e74b607..db6f40f 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -53,6 +53,7 @@ WriteMakefile 'File::Basename' => 0, 'File::Path' => 0, 'File::Temp' => 0, + 'List::Pairwise' => 0, 'Scalar::Util' => 0, 'Time::HiRes' => 0, 'YAML::Syck' => 0, diff --git a/Todo b/Todo index 3999eb4..3617bb3 100644 --- a/Todo +++ b/Todo @@ -1,3 +1,7 @@ +2008-10-11 Andreas J. Koenig + + * dirtymark now lives in Recentfile, needs to be used in rmirror. + 2008-10-10 Andreas J. Koenig * Slaven suggests to have the current epoch or the whole current diff --git a/lib/File/Rsync/Mirror/Recent.pm b/lib/File/Rsync/Mirror/Recent.pm index e70f01a..86bab3d 100644 --- a/lib/File/Rsync/Mirror/Recent.pm +++ b/lib/File/Rsync/Mirror/Recent.pm @@ -23,6 +23,7 @@ use File::Copy qw(cp); use File::Path qw(mkpath); use File::Rsync; use File::Temp; +use List::Pairwise qw(mapp grepp); use List::Util qw(first max); use Scalar::Util qw(reftype); use Storable; @@ -266,11 +267,17 @@ sub overview { my $span = $re->[0]{epoch}-$re->[-1]{epoch}; $rfsummary = [ + "Iv", $rf->interval, + "Cnt", scalar @$re, - sprintf ("%.3f", $re->[0]{epoch}), - sprintf ("%.3f", $re->[-1]{epoch}), - sprintf ("%.3f", $span), + "Max", + sprintf ("%.2f", $re->[0]{epoch}), + "Min", + sprintf ("%.2f", $re->[-1]{epoch}), + "Span", + sprintf ("%.2f", $span), + "Util", # u9n:) ($rf->interval eq "Z" ? "-" @@ -278,7 +285,7 @@ sub overview { sprintf ("%5.1f%%", 100 * $span / $rf->interval_secs) ), ]; - @rank{@{$rfsummary}[2,3]} = (); + @rank{mapp {$b} grepp {$a =~ /^(Max|Min)$/} @$rfsummary} = (); } else { next RECENTFILE; } @@ -286,35 +293,27 @@ sub overview { } @rank{sort {$b <=> $a} keys %rank} = 1..keys %rank; my $maxrank = max values %rank; - for my $s (@s) { + for my $rfsummary (@s) { my $string = " " x $maxrank; my @borders; - for (2,3) { - push @borders, $rank{$s->[$_]}-1; + for my $ele (qw(Max Min)) { + my($r) = mapp {$b} grepp {$a eq $ele} @$rfsummary; + push @borders, $rank{$r}-1; } for ($borders[0],$borders[1]) { substr($string,$_,1) = "^"; } - push @$s, $string; + push @$rfsummary, "Cloud", $string; } my @sprintf; - for my $i (0..$#{$s[0]}) { - my $maxlength = max map { length $_->[$i] } @s; + for (my $i = 0; $i <= $#{$s[0]}; $i+=2) { + my $maxlength = max map { length $_->[$i+1] } @s; push @sprintf, "%" . $maxlength . "s"; } my $sprintf = join " ", @sprintf; $sprintf .= "\n"; - my $headline = sprintf $sprintf, - ( - "", - "Cnt", - "Max", - "Min", - "Span", - "Util", # u9n:) - "Cloud", - ); - join "", $headline, map { sprintf $sprintf, @$_ } @s; + my $headline = sprintf $sprintf, mapp {$a} @{$s[0]}; + join "", $headline, map { sprintf $sprintf, mapp {$b} @$_ } @s; } =head2 _pathdb -- 2.11.4.GIT