You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2007/12/12 23:07:47 UTC
svn commit: r603754 - in /spamassassin/trunk/masses: hit-frequencies
rule-qa/automc/ruleqa.cgi
Author: jm
Date: Wed Dec 12 14:07:47 2007
New Revision: 603754
URL: http://svn.apache.org/viewvc?rev=603754&view=rev
Log:
bug 5721: avoid reporting overlaps between a meta rule and its subrules
Modified:
spamassassin/trunk/masses/hit-frequencies
spamassassin/trunk/masses/rule-qa/automc/ruleqa.cgi
Modified: spamassassin/trunk/masses/hit-frequencies
URL: http://svn.apache.org/viewvc/spamassassin/trunk/masses/hit-frequencies?rev=603754&r1=603753&r2=603754&view=diff
==============================================================================
--- spamassassin/trunk/masses/hit-frequencies (original)
+++ spamassassin/trunk/masses/hit-frequencies Wed Dec 12 14:07:47 2007
@@ -192,6 +192,7 @@
my $num_ham = 0;
my %ranking = ();
my $ok_lang = '';
+my %meta_subrule_pairs = ();
my %rule_times = ();
@@ -200,8 +201,8 @@
$ok_lang = lc ($opt_l || $opt_L || '');
if ($ok_lang eq 'all') { $ok_lang = '.'; }
-if ($opt_t && $rules_pl_unparseable) {
- die "-t requires rules.pl to be parseable";
+if (($opt_t || $opt_o) && $rules_pl_unparseable) {
+ die "-t/-o require rules.pl to be parseable";
}
foreach my $key (keys %rules) {
@@ -843,6 +844,9 @@
my $reverse_ratio = $1 || 0;
next unless defined $r2;
+ my $is_subrule = ($meta_subrule_pairs{"$r1.$r2"}
+ || $meta_subrule_pairs{"$r2.$r1"});
+
if ($opt_d) {
print qq{
<overlappair>
@@ -852,9 +856,10 @@
};
} else {
- printf " overlap %4s: %3d%% of %s hits also hit %s; %3d%% of %s hits also hit %s\n",
+ printf " overlap %4s: %3d%% of %s hits also hit %s; %3d%% of %s hits also hit %s%s\n",
$type, $ratio, $r2, $r1,
- $reverse_ratio, $r1, $r2;
+ $reverse_ratio, $r1, $r2,
+ ($is_subrule ? ' (meta rule and subrule)' : '');
}
}
}
@@ -865,8 +870,7 @@
}
sub _prettify_overlap_rules {
- my $rule = shift;
- my $str = shift;
+ my ($rule, $str) = @_;
my @rules = sort split(' ', $str);
if ($rules{$rule} && $rules{$rule}->{type} eq 'meta') {
@@ -879,12 +883,15 @@
@rules = grep {
my $tmp = $_;
$tmp =~ s/\[.*\]$//;
- $code !~ /\b\Q${tmp}\E\b/;
+ if ($code =~ /\b\Q${tmp}\E\b/) {
+ $meta_subrule_pairs{"$rule.$tmp"} = 1;
+ 0;
+ } else {
+ 1;
+ }
} @rules;
}
-
- my $s = join (' ', @rules);
- return $s;
+ return join (' ', @rules);
}
sub _hmap_to_overlap_ratio {
Modified: spamassassin/trunk/masses/rule-qa/automc/ruleqa.cgi
URL: http://svn.apache.org/viewvc/spamassassin/trunk/masses/rule-qa/automc/ruleqa.cgi?rev=603754&r1=603753&r2=603754&view=diff
==============================================================================
--- spamassassin/trunk/masses/rule-qa/automc/ruleqa.cgi (original)
+++ spamassassin/trunk/masses/rule-qa/automc/ruleqa.cgi Wed Dec 12 14:07:47 2007
@@ -1306,7 +1306,8 @@
my $out_subrules = '';
foreach my $line (split(/^/m, $ovl)) {
- my $issubrule = ($line =~ /\d+\%\s+of __/);
+ my $issubrule = ($line =~ /\d+\%\s+of __/
+ || $line =~ /\(meta rule and subrule\)/);
$line =~ s{^(\s+overlap\s+(?:ham|spam):\s+\d+% )(\S.+?)$}{
my $str = "$1";