From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 58CAA1FA09 for ; Tue, 26 May 2020 09:05:25 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/2] learn: support --all with `rm' Date: Tue, 26 May 2020 09:05:24 +0000 Message-Id: <20200526090524.2831-3-e@yhbt.net> In-Reply-To: <20200526090524.2831-1-e@yhbt.net> References: <20200526090524.2831-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: I found myself wanting to remove a message from all inboxes while working on a test case in another branch. I figure this could also be useful for globally removing messages which are in the grey area or too big for spamc. --- Documentation/public-inbox-learn.pod | 8 ++++++-- script/public-inbox-learn | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Documentation/public-inbox-learn.pod b/Documentation/public-inbox-learn.pod index addcbcb5113..9c6b261b3a5 100644 --- a/Documentation/public-inbox-learn.pod +++ b/Documentation/public-inbox-learn.pod @@ -50,8 +50,12 @@ C is C in L. =item rm -This is identical to the C command above, but does -not feed the message to L +This is similar to the C command above, but does +not feed the message to L and only removes messages +which match on any of the C, C, and C headers. + +The C<--all> option may be used match C semantics in removing +the message from all configured inboxes. =back diff --git a/script/public-inbox-learn b/script/public-inbox-learn index 0cb2c8e96e5..5cd08d490bf 100644 --- a/script/public-inbox-learn +++ b/script/public-inbox-learn @@ -12,10 +12,15 @@ use PublicInbox::InboxWritable; use PublicInbox::Eml; use PublicInbox::Address; use PublicInbox::Spamcheck::Spamc; +use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev); +my %opt = (all => 0); +GetOptions(\%opt, 'all') or die "bad command-line args\n"; + my $train = shift or die "usage: $usage\n"; if ($train !~ /\A(?:ham|spam|rm)\z/) { die "`$train' not recognized.\nusage: $usage\n"; } +die "--all only works with `rm'\n" if $opt{all} && $train ne 'rm'; my $spamc = PublicInbox::Spamcheck::Spamc->new; my $pi_config = PublicInbox::Config->new; @@ -68,12 +73,12 @@ sub remove_or_add ($$$$) { } # spam is removed from all known inboxes since it is often Bcc:-ed -if ($train eq 'spam') { +if ($train eq 'spam' || ($train eq 'rm' && $opt{all})) { $pi_config->each_inbox(sub { my ($ibx) = @_; $ibx = PublicInbox::InboxWritable->new($ibx); my $im = $ibx->importer(0); - $im->remove($mime, 'spam'); + $im->remove($mime, $train); $im->done; }); } else {