* [PATCH 3/3] lei_input: treat ".eml" and ".patch" suffix as "eml"
2021-03-29 7:08 7% [PATCH 0/3] lei input improvements Eric Wong
@ 2021-03-29 7:08 6% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2021-03-29 7:08 UTC (permalink / raw)
To: meta
".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');
^ permalink raw reply related [relevance 6%]
* [PATCH 0/3] lei input improvements
@ 2021-03-29 7:08 7% Eric Wong
2021-03-29 7:08 6% ` [PATCH 3/3] lei_input: treat ".eml" and ".patch" suffix as "eml" Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2021-03-29 7:08 UTC (permalink / raw)
To: meta
These affect the convert, import, mark sub-commands.
Eric Wong (3):
lei_input: avoid special case sub for --stdin
lei: use IO::Uncompress::Gunzip MultiStream
lei_input: treat ".eml" and ".patch" suffix as "eml"
lib/PublicInbox/LeiConvert.pm | 1 -
lib/PublicInbox/LeiImport.pm | 1 -
lib/PublicInbox/LeiInput.pm | 33 +++++++++++++++++++--------------
lib/PublicInbox/LeiMark.pm | 1 -
lib/PublicInbox/LeiRemote.pm | 2 +-
lib/PublicInbox/LeiXSearch.pm | 2 +-
t/lei-import.t | 2 +-
t/lei-mark.t | 4 ++--
8 files changed, 24 insertions(+), 22 deletions(-)
^ permalink raw reply [relevance 7%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2021-03-29 7:08 7% [PATCH 0/3] lei input improvements Eric Wong
2021-03-29 7:08 6% ` [PATCH 3/3] lei_input: treat ".eml" and ".patch" suffix as "eml" Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).