ignore: exigrey
authorheiko
Tue, 02 Jan 2007 16:56:19 +0000
changeset 10 02accfddd669
parent 9 417562509dbe
child 11 894ac86840e1
ignore: exigrey --clean implemented
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: