Documentation/public-inbox-learn.pod | 8 ++++++-- script/public-inbox-learn | 9 +++++++-- diff --git a/Documentation/public-inbox-learn.pod b/Documentation/public-inbox-learn.pod index addcbcb5113f327b884f32a6116c25e1e4bd94b8..9c6b261b3a5b2a61be637345b9c3dc932b282a85 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 0cb2c8e96e56e706b1e5f158003fa351cf9acc0d..5cd08d490bf0273bce85ce4d148bdb09035ad288 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 @@ $im->done; } # 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 {