fixed duplicate spot, always make clean ending
[spider.git] / perl / DXDupe.pm
index bcc0f7b0ea843a0aeaf080781a4a1355b7c8db2b..9198aee6c050939b2d5852f81d089683938835da 100644 (file)
@@ -19,15 +19,11 @@ $default = 48*24*60*60;
 $lasttime = 0;
 $fn = "$main::data/dupefile";
 
-use vars qw($VERSION $BRANCH);
-$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
-$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
-$main::build += $VERSION;
-$main::branch += $BRANCH;
-
 sub init
 {
-       $dbm = tie (%d, 'DB_File', $fn) or confess "can't open dupe file: $fn ($!)";
+       unlink $fn;
+       $dbm = tie (%d, 'DB_File', $fn);
+       confess "cannot open $fn $!" unless $dbm;
 }
 
 sub finish
@@ -35,25 +31,31 @@ sub finish
        undef $dbm;
        untie %d;
        undef %d;
+       unlink $fn;
+}
+
+sub active
+{
+       return $dbm;
 }
 
 sub check
 {
-       my ($s, $t) = @_;
+       my $s = shift;
        return 1 if find($s);
-       add($s, $t);
+       add($s, shift);
        return 0;
 }
 
 sub find
 {
-       return 1 if exists $d{$_[0]};
+       return $d{$_[0]};
 }
 
 sub add
 {
-       my ($s, $t) = @_;
-       $t = $main::systime + $default unless $t;
+       my $s = shift;
+       my $t = shift || $main::systime + $default;
        $d{$s} = $t;
 }
 
@@ -67,9 +69,11 @@ sub process
 {
        # once an hour
        if ($main::systime - $lasttime >=  3600) {
+               my @del;
                while (($k, $v) = each %d) {
-                       delete $d{$k} if $main::systime >= $v;
+                       push @del, $k  if $main::systime >= $v;
                }
+               delete $d{$_} for @del;
                $lasttime = $main::systime;
        }
 }
@@ -96,7 +100,7 @@ sub listdups
        my @out;
        for (sort { $d{$a} <=> $d{$b} } grep { m{$regex}i } keys %d) {
                my ($dum, $key) = unpack "a1a*", $_;
-               push @out, "$key = " . cldatetime($d{$_} - $dupage);
+               push @out, "$key = " . cldatetime($d{$_} - $dupage) . " expires " . cldatetime($d{$_});
        }
        return @out;
 }