Because user errors happen...
if (!$json) {
# default to the cheapest sort since MUA usually resorts
$lei->{opt}->{'sort'} //= 'docid' if $dst ne '/dev/stdout';
- $lei->{l2m} = PublicInbox::LeiToMail->new($lei);
+ $lei->{l2m} = eval { PublicInbox::LeiToMail->new($lei) };
+ return $lei->fail($@) if $@;
}
$lei->{dedupe} //= PublicInbox::LeiDedupe->new($lei);
$self;
my $self = bless {}, $cls;
if ($fmt eq 'maildir') {
$self->{base_type} = 'maildir';
+ -e $dst && !-d _ and die
+ "$dst exists and is not a directory\n";
$lei->{ovv}->{dst} = $dst .= '/' if substr($dst, -1) ne '/';
} elsif (substr($fmt, 0, 4) eq 'mbox') {
+ -e $dst && !-f _ && !-p _ and die
+ "$dst exists and is not a regular file\n";
$self->can("eml2$fmt") or die "bad mbox --format=$fmt\n";
$self->{base_type} = 'mbox';
} else {
my $d = $dst.$x;
next if -d $d;
require File::Path;
- File::Path::mkpath($d) or die "mkpath($d): $!";
+ File::Path::mkpath($d);
-d $d or die "$d is not a directory";
}
}
sub do_post_augment {
my ($lei, $zpipe, $au_done) = @_;
my $l2m = $lei->{l2m} or die 'BUG: no {l2m}';
- $l2m->post_augment($lei, $zpipe);
+ eval { $l2m->post_augment($lei, $zpipe) };
+ if (my $err = $@) {
+ if (my $lxs = delete $lei->{lxs}) {
+ $lxs->wq_kill;
+ $lxs->wq_close;
+ }
+ $lei->fail("$err");
+ }
close $au_done; # triggers wait_startq
}
$lei->('ls-external');
like($out, qr/boost=0\n/s, 'ls-external has output');
+ ok(!$lei->(qw(q s:prefix -o /dev/null -f maildir)), 'bad maildir');
+ like($err, qr!/dev/null exists and is not a directory!,
+ 'error shown');
+ is($? >> 8, 1, 'errored out with exit 1');
+
+ ok(!$lei->(qw(q s:prefix -f mboxcl2 -o), $home), 'bad mbox');
+ like($err, qr!\Q$home\E exists and is not a regular file!,
+ 'error shown');
+ is($? >> 8, 1, 'errored out with exit 1');
+
+ ok(!$lei->(qw(q s:prefix -o /dev/stdout -f Mbox2)), 'bad format');
+ like($err, qr/bad mbox --format=mbox2/, 'error shown');
+ is($? >> 8, 1, 'errored out with exit 1');
+
# note, on a Bourne shell users should be able to use either:
# s:"use boolean prefix"
# "s:use boolean prefix"