use strict (qw(vars));
use IO::Handle;
+use POSIX;
our %f;
+my $publish_rejections_patfile= '/dev/null';
my $publish_rejections= 0;
-if ($ARGV[0] eq '-P') {
- $publish_rejections= 1;
- shift @ARGV;
+
+for (;;) {
+ last unless @ARGV;
+ last unless $ARGV[0] =~ m/^-/;
+ $_ = shift @ARGV;
+ last if m/^--?$/;
+ while (m/^-./) {
+ if (s/^-P(.*)$//) {
+ $publish_rejections= 1;
+ $publish_rejections_patfile= $1 if length $1;
+ } else {
+ die "bad option $_ ?";
+ }
+ }
}
our ($how) = @_;
parse__stumpsubject();
last if m/^$/;
}
+ my $cathow = '';
while (<STDIN>) {
chomp;
+ if (m/^\#( \w+.*)$/) {
+ $cathow = $1;
+ }
next unless m/^reject|^approve|^preapprove/;
- $f{Event}= $_;
+ $f{Event}= $_.$cathow;
last;
}
}
$f{Now}= time;
+sub want_publish_rejection_kind ($) {
+ my ($kind) = @_;
+ return 1 if $publish_rejections_patfile eq '';
+ if (!open PF, '<', $publish_rejections_patfile) {
+ return 1 if $!==&ENOENT;
+ die "$publish_rejections_patfile: $!";
+ }
+ while (<PF>) {
+ s/^\s+//;
+ s/\s+$//;
+ next if m/^\#/;
+ next unless m/\S/;
+ my $yn = !s/^\!//;
+ s/[^0-9a-zA-Z*?]/\\$&/g;
+ s/\*/.*/g;
+ s/\?/./g;
+ return $yn if $kind =~ m/^$_$/;
+ }
+ close PF or die $!;
+ return 1;
+}
+
if ($publish_rejections &&
- $f{Event} =~ m/^notify reject /) {
+ $f{Event} =~ m/^notify reject (\S+)/ &&
+ want_publish_rejection_kind($1))
+{
$f{CopyRef}= $f{MessageNum} || $f{MessageID};
$f{CopyRef} =~ s/\W/ sprintf '-%02x', ord($&) /ge;
open I, ">$dir/public/nr-$f{CopyRef}.txt" or die $!;