X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FLog%2FSpam.pm;h=a2fe44cdc47bc88af76241d2026ffe20a953767d;hb=8908354a3aa714d86e557c3e4eb8bebc7c6402d9;hp=df2d5e0862c07f1d08d27cbba55ec1a369c4ab39;hpb=fdec16f10fb4c0cb7e508e2eb709c8869172aadf;p=debbugs.git diff --git a/Debbugs/Log/Spam.pm b/Debbugs/Log/Spam.pm index df2d5e0..a2fe44c 100644 --- a/Debbugs/Log/Spam.pm +++ b/Debbugs/Log/Spam.pm @@ -8,7 +8,8 @@ package Debbugs::Log::Spam; =head1 NAME -Debbugs::Log::Spam -- an interface to debbugs .log.spam files +Debbugs::Log::Spam -- an interface to debbugs .log.spam files and .log.spam.d +directories =head1 SYNOPSIS @@ -18,6 +19,9 @@ my $spam = Debbugs::Log::Spam->new(bug_num => '12345'); =head1 DESCRIPTION +Spam in bugs can be excluded using a .log.spam file and a .log.spam.d directory. +The file contains message ids, one per line, and the directory contains files +named after message ids, one per file. =head1 BUGS @@ -120,7 +124,18 @@ sub _init { chomp; $self->{spam}{$_} = 1; } - close ($fh); + close ($fh) or + croak "Unable to close bug log filehandle: $!"; + } + if (-d $self->{name}.'.d') { + opendir(my $d,$self->{name}.'.d') or + croak "Unable to open bug log spamdir '$self->{name}.d' for reading: $!"; + for my $dir (readdir($d)) { + next unless $dir =~ m/([^\.].*)_(\w+)$/; + $self->{spam}{$1} = 1; + } + closedir($d) or + croak "Unable to close bug log spamdir: $!"; } return $self; } @@ -136,7 +151,7 @@ Saves changes to the bug log spam file. sub save { my $self = shift; return unless keys %{$self->{spam}}; - filelock($self->{name}); + filelock($self->{name}.'.lock'); open(my $fh,'>',$self->{name}.'.tmp') or croak "Unable to open bug log spam '$self->{name}.tmp' for writing: $!"; binmode($fh,':encoding(UTF-8)');