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 2005/11/01 03:50:38 UTC

svn commit: r329955 - /spamassassin/trunk/build/mkrules

Author: jm
Date: Mon Oct 31 18:50:35 2005
New Revision: 329955

URL: http://svn.apache.org/viewcvs?rev=329955&view=rev
Log:
rule renaming: now will actually rename rules

Modified:
    spamassassin/trunk/build/mkrules

Modified: spamassassin/trunk/build/mkrules
URL: http://svn.apache.org/viewcvs/spamassassin/trunk/build/mkrules?rev=329955&r1=329954&r2=329955&view=diff
==============================================================================
--- spamassassin/trunk/build/mkrules (original)
+++ spamassassin/trunk/build/mkrules Mon Oct 31 18:50:35 2005
@@ -83,7 +83,7 @@
 
 # context for the rules compiler
 my $seen_rules = { };
-my $said_renamed_warning = { };
+my $renamed_rules = { };
 my $output_files = { };
 my $output_file_text = { };
 
@@ -240,7 +240,7 @@
       my $val = $3;
 
       my $origname = $name;
-      $name = rule_name_avoid_collisions($name, $f);
+      $name = sandbox_rule_name_avoid_collisions($name, $f);
 
       # TODO: sandbox rules -- enforce "T_" prefix
 
@@ -263,7 +263,7 @@
       my $val = $3;
 
       my $origname = $name;
-      $name = rule_name_avoid_collisions($name, $f);
+      $name = sandbox_rule_name_avoid_collisions($name, $f);
 
       if (!$rules->{$name}) { $rules->{$name} = rule_entry_create(); }
       $rules->{$name}->{origname} = $origname;
@@ -332,6 +332,9 @@
       $output_file_text->{$pubfile} .= $cmts;
     }
 
+    # fix up any rule renamings we were supposed to do
+    sed_renamed_rule_names(\$text);
+
     my $cond = $rules->{$name}->{cond};
     if ($cond) {
       $output_file_text->{$pubfile} .= $cond.$text."endif\n";
@@ -440,25 +443,41 @@
   };
 }
 
-sub rule_name_avoid_collisions {
+sub sandbox_rule_name_avoid_collisions {
   my ($rule, $path) = @_;
-  if (!exists $seen_rules->{$rule}) {
+  my $new;
+  my $newreason;
+
+  if ($rule !~ /^(?:T_|__)/) {
+    $new = "T_".$rule;
+    $newreason = "missing T_ prefix";
+  }
+  elsif (!exists $seen_rules->{$rule}) {
     return $rule;
   }
   else {
-    my $new = $path;
+    $new = $path;
     $new =~ s/[^A-Za-z0-9]+/_/gs;
     $new =~ s/_+/_/gs;
     $new =~ s/^_//;
     $new =~ s/_$//;
     $new = $rule.'_'.$new;
+    $newreason = "collision with existing rule";
+  }
 
-    if (!$said_renamed_warning->{$new}) {
-      $said_renamed_warning->{$new} = 1;
-      warn "$rule: renamed to $new due to collision with existing rule\n";
-    }
+  if (!$renamed_rules->{$new}) {
+    $renamed_rules->{$new} = $rule;
+    warn "WARNING: $rule: needs renaming to $new due to $newreason\n";
+  }
+
+  return $new;
+}
 
-    return $new;
+sub sed_renamed_rule_names {
+  my ($textref) = @_;
+  foreach my $new (keys %{$renamed_rules}) {
+    my $rule = $renamed_rules->{$new};
+    $$textref =~ s/\b${rule}\b/${new}/gs;
   }
 }