--- 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: