]> Sergey Matveev's repositories - public-inbox.git/blobdiff - public-inbox-learn
psgi: enable ReverseProxy middleware by default
[public-inbox.git] / public-inbox-learn
index 13b75b763cfc9d3280011b29a237065d013de987..0c7b4199abeea2def7b452101ce83e4e24b9b7a1 100755 (executable)
@@ -1,6 +1,9 @@
 #!/usr/bin/perl -w
-# Copyright (C) 2014, Eric Wong <normalperson@yhbt.net> and all contributors
+# Copyright (C) 2014-2015 all contributors <meta@public-inbox.org>
 # License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt)
+#
+# Used for training spam (via SpamAssassin) and removing messages from a
+# public-inbox
 my $usage = "$0 (spam|ham) < /path/to/message";
 use strict;
 use warnings;
@@ -24,9 +27,16 @@ foreach my $h (qw(Cc To)) {
        }
 }
 
-my $in = $mime->as_string;
-$mime->body_set('');
+my ($name, $email, $date);
+
+if ($train eq "ham") {
+       require PublicInbox::MDA;
+       require PublicInbox::Filter;
+       PublicInbox::Filter->run($mime);
+       ($name, $email, $date) = PublicInbox::MDA->author_info($mime);
+}
 
+my $in = $mime->as_string;
 my $err = 0;
 my @output = qw(> /dev/null > /dev/null);
 
@@ -50,23 +60,18 @@ foreach my $recipient (keys %dests) {
                        }
                }
        } else { # $train eq "ham"
-               require PublicInbox::MDA;
-               require PublicInbox::Filter;
-
-               # no checking for errors here, we assume the message has
+               # no checking for spam here, we assume the message has
                # been reviewed by a human at this point:
-               PublicInbox::Filter->run($mime);
                PublicInbox::MDA->set_list_headers($mime, $dst);
+               my $s  = $mime->as_string;
 
-               my ($name, $email, $date) =
-                               PublicInbox::MDA->author_info($mime);
                local $ENV{GIT_AUTHOR_NAME} = $name;
                local $ENV{GIT_AUTHOR_EMAIL} = $email;
                local $ENV{GIT_AUTHOR_DATE} = $date;
 
                # Ham messages are trained when they're marked into
                # a SEEN state, so this is idempotent:
-               run([PublicInbox::MDA->cmd, $git_dir], \$in, \$out, \$err);
+               run([PublicInbox::MDA->cmd, $git_dir], \$s, \$out, \$err);
                if ($err !~ /CONFLICT/) {
                        $err = 1;
                }
@@ -74,5 +79,11 @@ foreach my $recipient (keys %dests) {
        if (!run([qw(spamc -L), $train], \$in, @output)) {
                $err = 1;
        }
+
+       $err or eval {
+               require PublicInbox::SearchIdx;
+               PublicInbox::SearchIdx->new($git_dir, 2)->index_sync;
+       };
 }
+
 exit $err;