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 2008/02/08 17:27:30 UTC

svn commit: r619931 - in /spamassassin/trunk: build/mkrules t/mkrules.t

Author: jm
Date: Fri Feb  8 08:27:28 2008
New Revision: 619931

URL: http://svn.apache.org/viewvc?rev=619931&view=rev
Log:
mkrules: support nested conditionals so that Mark's sandbox rules work, add test case

Modified:
    spamassassin/trunk/build/mkrules
    spamassassin/trunk/t/mkrules.t

Modified: spamassassin/trunk/build/mkrules
URL: http://svn.apache.org/viewvc/spamassassin/trunk/build/mkrules?rev=619931&r1=619930&r2=619931&view=diff
==============================================================================
--- spamassassin/trunk/build/mkrules (original)
+++ spamassassin/trunk/build/mkrules Fri Feb  8 08:27:28 2008
@@ -532,7 +532,11 @@
         \s+(.*?)$
       /x)
     {
-      $current_conditional = $orig;
+      if ($current_conditional) {
+        $current_conditional .= "#|#".$orig;
+      } else {
+        $current_conditional = $orig;
+      }
     }
     elsif (/^endif\b/x)
     {
@@ -609,7 +613,7 @@
 
       my $cond;
       if ($current_conditional) {
-        $name = $current_conditional; $name =~ s/\s+/ /gs;
+        $name = $current_conditional; $name =~ s/\#\|\#/ /gs; $name =~ s/\s+/ /gs;
         $cond = $current_conditional;
       }
 
@@ -748,7 +752,14 @@
         $rules->{$ifplugin_text_name}->{output_file} = $pubfile;
       }
 
-      $rules->{$name}->{output_text} = "\n".$cond.$text."endif\n";
+      # ensure we produce enough "endif"s to match however many
+      # nested conditions there are
+      my $endifs = "endif\n";
+      while ($cond =~ s/\#\|\#//) {
+        $endifs .= "endif\n";
+      }
+
+      $rules->{$name}->{output_text} = "\n".$cond.$text.$endifs;
 
     } else {
       $rules->{$name}->{output_text} = $text;

Modified: spamassassin/trunk/t/mkrules.t
URL: http://svn.apache.org/viewvc/spamassassin/trunk/t/mkrules.t?rev=619931&r1=619930&r2=619931&view=diff
==============================================================================
--- spamassassin/trunk/t/mkrules.t (original)
+++ spamassassin/trunk/t/mkrules.t Fri Feb  8 08:27:28 2008
@@ -2,7 +2,7 @@
 
 use lib '.'; use lib 't';
 use SATest; sa_t_init("mkrules");
-use Test; BEGIN { plan tests => 89 };
+use Test; BEGIN { plan tests => 97 };
 use File::Copy;
 use File::Path;
 
@@ -391,6 +391,40 @@
 
 ok (mkrun ("--src $tdir/rulesrc --out $tdir/rules --manifest $tdir/MANIFEST --manifestskip $tdir/MANIFEST.SKIP --active $tdir/rules/active.list 2>&1", \&patterns_run_cb));
 checkfile("$tdir/rules/72_active.cf", \&patterns_run_cb);
+ok ok_all_patterns();
+save_tdir();
+
+# ---------------------------------------------------------------------------
+print " nested conditionals\n\n";
+
+%patterns = (
+  '72_active.cf: WARNING: not listed in manifest file' => manif_found,
+  "body GOOD /foo/"   => rule_line_1,
+  "describe GOOD desc_found"  => rule_line_2,
+  "ifplugin Mail::SpamAssassin::Plugin::DKIM" => ifplugin,
+  "if (version >= 3.002000)" => ifversion,
+);
+%anti_patterns = (
+  "describe T_GOOD desc_found"  => rule_line_2,
+);
+
+mkpath ([ "$tdir/rulesrc/sandbox/foo", "$tdir/rules" ]);
+
+write_file("$tdir/MANIFEST", [ ]);
+write_file("$tdir/MANIFEST.SKIP", [ "foo2\n" ]);
+write_file("$tdir/rules/active.list", [ "GOOD\n" ]);
+write_file("$tdir/rulesrc/sandbox/foo/20_foo.cf", [
+  "ifplugin Mail::SpamAssassin::Plugin::DKIM\n",
+  "if (version >= 3.002000)\n",
+  "body GOOD /foo/\n",
+  "describe GOOD desc_found\n",
+  "endif\n",
+  "endif\n",
+]);
+
+ok (mkrun ("--src $tdir/rulesrc --out $tdir/rules --manifest $tdir/MANIFEST --manifestskip $tdir/MANIFEST.SKIP --active $tdir/rules/active.list 2>&1", \&patterns_run_cb));
+checkfile("$tdir/rules/72_active.cf", \&patterns_run_cb);
+checkfile("$tdir/rules/70_sandbox.cf", \&patterns_run_cb);
 ok ok_all_patterns();
 save_tdir();