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 31B6D1FA00 for ; Mon, 29 Mar 2021 07:08:26 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 3/3] lei_input: treat ".eml" and ".patch" suffix as "eml" Date: Mon, 29 Mar 2021 07:08:25 +0000 Message-Id: <20210329070825.14798-4-e@80x24.org> In-Reply-To: <20210329070825.14798-1-e@80x24.org> References: <20210329070825.14798-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: ".eml" is a suffix supported by (/usr/local)/etc/mime.types on Debian and FreeBSD systems using the "mime-support" package. ".patch" is what "git format-patch" generates by default since git v1.5.0 in 2007. --- lib/PublicInbox/LeiInput.pm | 25 ++++++++++++++++++------- t/lei-import.t | 2 +- t/lei-mark.t | 4 ++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm index 93284e8b..c04fc2f8 100644 --- a/lib/PublicInbox/LeiInput.pm +++ b/lib/PublicInbox/LeiInput.pm @@ -14,9 +14,9 @@ sub check_input_format ($;$) { my $err = $files ? "regular file(s):\n@$files" : '--stdin'; return $lei->fail("--$opt_key unset for $err"); } + return 1 if $fmt eq 'eml'; require PublicInbox::MboxLock if $files; require PublicInbox::MboxReader; - return 1 if $fmt eq 'eml'; # XXX: should this handle {gz,bz2,xz}? that's currently in LeiToMail PublicInbox::MboxReader->reads($fmt) or return $lei->fail("--$opt_key=$fmt unrecognized"); @@ -28,7 +28,6 @@ sub check_input_format ($;$) { sub input_fh { my ($self, $ifmt, $fh, $name, @args) = @_; if ($ifmt eq 'eml') { - require PublicInbox::Eml; my $buf = do { local $/; <$fh> } // return $self->{lei}->child_error(1 << 8, <<""); error reading $name: $! @@ -60,13 +59,21 @@ sub input_path_url { $self, @args); return; } - $input =~ s!\A([a-z0-9]+):!!i and $ifmt = lc($1); + if ($input =~ s!\A([a-z0-9]+):!!i) { + $ifmt = lc($1); + } elsif ($input =~ /\.(?:patch|eml)\z/i) { + $ifmt = 'eml'; + } my $devfd = $lei->path_to_fd($input) // return; if ($devfd >= 0) { $self->input_fh($ifmt, $lei->{$devfd}, $input, @args); - } elsif (-f $input) { - my $m = $lei->{opt}->{'lock'} // ($ifmt eq 'eml' ? ['none'] : - PublicInbox::MboxLock->defaults); + } elsif (-f $input && $ifmt eq 'eml') { + open my $fh, '<', $input or + return $lei->fail("open($input): $!"); + $self->input_fh($ifmt, $fh, $input, @args); + } elsif (-f _) { + my $m = $lei->{opt}->{'lock'} // + PublicInbox::MboxLock->defaults; my $mbl = PublicInbox::MboxLock->acq($input, 0, $m); $self->input_fh($ifmt, $mbl->{fh}, $input, @args); } elsif (-d _ && (-d "$input/cur" || -d "$input/new")) { @@ -91,7 +98,6 @@ sub prepare_inputs { # returns undef on error push @$inputs, '/dev/stdin'; } my $net = $lei->{net}; # NetWriter may be created by l2m - my $fmt = $lei->{opt}->{'in-format'}; my (@f, @d); # e.g. Maildir:/home/user/Mail/ or imaps://example.com/INBOX for my $input (@$inputs) { @@ -120,6 +126,11 @@ sub prepare_inputs { # returns undef on error } else { return $lei->fail("Unable to handle $input"); } + } elsif ($input =~ /\.(eml|patch)\z/i && -f $input) { + lc($in_fmt//'eml') eq 'eml' or return $lei->fail(<<""); +$input is `eml', not --in-format=$in_fmt + + require PublicInbox::Eml; } else { my $devfd = $lei->path_to_fd($input) // return; if ($devfd >= 0 || -f $input || -p _) { diff --git a/t/lei-import.t b/t/lei-import.t index 33ce490d..99289748 100644 --- a/t/lei-import.t +++ b/t/lei-import.t @@ -4,7 +4,7 @@ use strict; use v5.10.1; use PublicInbox::TestCommon; test_lei(sub { ok(!lei(qw(import -F bogus), 't/plack-qp.eml'), 'fails with bogus format'); -like($lei_err, qr/\bbogus unrecognized/, 'gave error message'); +like($lei_err, qr/\bis `eml', not --in-format/, 'gave error message'); lei_ok(qw(q s:boolean), \'search miss before import'); unlike($lei_out, qr/boolean/i, 'no results, yet'); diff --git a/t/lei-mark.t b/t/lei-mark.t index 7855839e..98652c85 100644 --- a/t/lei-mark.t +++ b/t/lei-mark.t @@ -26,8 +26,8 @@ my $check_kw = sub { test_lei(sub { lei_ok(qw(ls-label)); is($lei_out, '', 'no labels, yet'); - lei_ok(qw(import -F eml t/utf8.eml)); - lei_ok(qw(mark -F eml t/utf8.eml +kw:flagged +L:urgent)); + lei_ok(qw(import t/utf8.eml)); + lei_ok(qw(mark t/utf8.eml +kw:flagged +L:urgent)); $check_kw->(['flagged'], L => ['urgent']); lei_ok(qw(ls-label)); is($lei_out, "urgent\n", 'label found'); ok(!lei(qw(mark -F eml t/utf8.eml +kw:seeen)), 'bad kw rejected');