You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by fe...@apache.org on 2005/03/06 08:54:04 UTC
svn commit: r156296 - spamassassin/trunk/lib/Mail/SpamAssassin.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Bayes.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
Author: felicity
Date: Sat Mar 5 23:54:02 2005
New Revision: 156296
URL: http://svn.apache.org/viewcvs?view=rev&rev=156296
Log:
bug 3704: if a message was already learned, don't autolearn it in the opposite way. added in no_relearn option to init_learner(), and changed init_learner() to go through a key/value pair array instead of numerous if/then statements to make it cleaner. also init_learner() now returns the original values so a change can be undone later on.
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Bayes.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin.pm?view=diff&r1=156295&r2=156296
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin.pm Sat Mar 5 23:54:02 2005
@@ -503,6 +503,11 @@
During the opportunistic journal sync and expire check, don't actually do the
expire but report back whether or not it should occur (optional, default 0).
+=item no_relearn
+
+If doing a learn operation, and the message has already been learned as
+the opposite type, don't re-learn the message.
+
=back
=cut
@@ -515,13 +520,24 @@
# Make sure we're already initialized ...
$self->init(1);
+ my %kv = (
+ 'force_expire' => 'learn_force_expire',
+ 'learn_to_journal' => 'learn_to_journal',
+ 'caller_will_untie' => 'learn_caller_will_untie',
+ 'wait_for_lock' => 'learn_wait_for_lock',
+ 'opportunistic_expire_check_only' => 'opportunistic_expire_check_only',
+ 'no_relearn' => 'learn_no_relearn',
+ );
+
+ my %ret;
+
# Set any other options that need setting ...
- if (defined $opts->{force_expire}) { $self->{learn_force_expire} = $opts->{force_expire}; }
- if (defined $opts->{learn_to_journal}) { $self->{learn_to_journal} = $opts->{learn_to_journal}; }
- if (defined $opts->{caller_will_untie}) { $self->{learn_caller_will_untie} = $opts->{caller_will_untie}; }
- if (defined $opts->{wait_for_lock}) { $self->{learn_wait_for_lock} = $opts->{wait_for_lock}; }
- if (defined $opts->{opportunistic_expire_check_only}) { $self->{opportunistic_expire_check_only} = $opts->{opportunistic_expire_check_only}; }
- 1;
+ while( my($k,$v) = each %kv ) {
+ $ret{$k} = $self->{$v};
+ if (exists $opts->{$k}) { $self->{$v} = $opts->{$k}; }
+ }
+
+ return \%ret;
}
###########################################################################
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Bayes.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/Bayes.pm?view=diff&r1=156295&r2=156296
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Bayes.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Bayes.pm Sat Mar 5 23:54:02 2005
@@ -782,6 +782,14 @@
} elsif ($seen !~ /^[hs]$/) {
warn("bayes: db_seen corrupt: value='$seen' for $msgid, ignored");
} else {
+ # bug 3704: If the message was already learned, don't try learning it again.
+ # this prevents, for instance, manually learning as spam, then autolearning
+ # as ham, or visa versa.
+ if ($self->{main}->{learn_no_relearn}) {
+ dbg("bayes: $msgid already learnt as opposite, not re-learning");
+ return 0;
+ }
+
dbg("bayes: $msgid already learnt as opposite, forgetting first");
# kluge so that forget() won't untie the db on us ...
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm?view=diff&r1=156295&r2=156296
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PerMsgStatus.pm Sat Mar 5 23:54:02 2005
@@ -295,6 +295,9 @@
isspam => $isspam
});
+ # bug 3704: temporarily override learn's ability to re-learn a message
+ my $orig_learner = $self->{main}->init_learner({ "no_relearn" => 1 });
+
eval {
my $learnstatus = $self->{main}->learn ($self->{msg}, undef, $isspam, 0);
$learnstatus->finish();
@@ -307,6 +310,9 @@
$self->{main}->{bayes_scanner}->sanity_check_is_untied();
}
};
+
+ # reset learner options to their original values
+ $self->{main}->init_learner($orig_learner);
if ($@) {
dbg("learn: auto-learning failed: $@");