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";