diff -r 417562509dbe -r 02accfddd669 exigrey.pl --- a/exigrey.pl Tue Jan 02 15:23:46 2007 +0000 +++ b/exigrey.pl Tue Jan 02 16:56:19 2007 +0000 @@ -20,6 +20,7 @@ use warnings; use Getopt::Long; use File::Basename; +use File::Temp qw/tmpfile/; use constant ME => basename $0; use FindBin qw/$Bin/; use POSIX qw/strftime mktime/; @@ -31,15 +32,18 @@ my $opt_list; my $opt_stats; my $opt_help; +my $opt_clean; sub iterate(\%$); +sub connectDB(\%$); MAIN: { GetOptions( "list!" => \$opt_list, "stats!" => \$opt_stats, - "help!" => \$opt_help + "clean!" => \$opt_clean, + "help!" => \$opt_help, ) or die ME.": Bad usage, try ".ME." --help.\n"; if ($opt_help) { @@ -47,12 +51,10 @@ print; exit 0; }; - my $db = shift || $DEFAULT{db}; - $db = getDBDir() ."/$db" unless $db =~ /^\//; - - my %h; tie %h, "BerkeleyDB::Hash", -Filename => $db or die; if ($opt_list) { + my %h; + connectDB(%h, shift || $DEFAULT{db}); iterate(%h, sub { my ($item, $v0, $v1, $dv) = @_; printf "%-16s:\t$v0 $v1 (%3ds %s %s)\n", @@ -64,6 +66,9 @@ } if ($opt_stats) { + my %h; + my $db = connectDB(%h, shift || $DEFAULT{db}); + my ($seen, $returned, $oldest); $oldest = time(); iterate(%h, sub { @@ -89,6 +94,27 @@ exit 0; } + if ($opt_clean) { + my %h; + my $days = shift; $days = 7 unless defined $days; + my $db = shift; $db = $DEFAULT{db} unless defined $db; + + my $cut = time() - ($days * 86400); + my $tmp = tmpfile(); + + $db = connectDB(%h, $db); + iterate(%h, sub { + my ($item, $v0, $v1, $dv) = @_; + print $tmp $item if $v1 <= $cut; + }); + + seek($tmp, 0, 0) or die "Can't seek tmpfile"; + delete $h{$_} while <$tmp>; + + print "$. items deleted\n"; + exit 0; + } + print unseen(@ARGV, 10) . "\n"; } @@ -104,4 +130,11 @@ } } +sub connectDB(\%$) { + my ($h, $db) = @_; + $db = getDBDir() ."/$db" unless $db =~ /^\//; + tie %$h, "BerkeleyDB::Hash", -Filename => $db or die; + return $db; +} + # vim:ft=perl aw sts=4 sw=4: