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();