From 66b5829892cf0fcd5249e26be21d8b3f3ee35816 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 30 May 2021 06:33:58 +0000 Subject: lei: support implicit stdin by default This adds implicit stdin suppport for p2q and lcat, while rm and rediff no longer need explicit support for it. --- lib/PublicInbox/LEI.pm | 12 ++++++++++-- lib/PublicInbox/LeiRediff.pm | 1 - lib/PublicInbox/LeiRm.pm | 1 - t/lei-p2q.t | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index f2dfc320..3527cf09 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -638,7 +638,15 @@ sub optparse ($$$) { my $ok; for my $o (@or) { if ($o =~ /\A--([a-z0-9\-]+)/) { - $ok = defined($OPT->{$1}); + my $sw = $1; + # assume pipe/regular file on stdin + # w/o args means stdin + if ($sw eq 'stdin' && !@$argv && + (-p $self->{0} || + -f _) && -r _) { + $OPT->{stdin} //= 1; + } + $ok = defined($OPT->{$sw}); last if $ok; } elsif (defined($argv->[$i])) { $ok = 1; @@ -906,7 +914,7 @@ sub start_mua { } push @cmd, $mfolder unless defined($replaced); if ($self->{sock}) { # lei(1) client process runs it - # restore terminal: echo $query | lei q -stdin --mua=... + # restore terminal: echo $query | lei q --stdin --mua=... my $io = []; $io->[0] = $self->{1} if $self->{opt}->{stdin} && -t $self->{1}; send_exec_cmd($self, $io, \@cmd, {}); diff --git a/lib/PublicInbox/LeiRediff.pm b/lib/PublicInbox/LeiRediff.pm index 2e793df5..c8bd0dfb 100644 --- a/lib/PublicInbox/LeiRediff.pm +++ b/lib/PublicInbox/LeiRediff.pm @@ -201,7 +201,6 @@ sub input_eml_cb { # callback for all emails sub lei_rediff { my ($lei, @inputs) = @_; $lei->_lei_store(1)->write_prepare($lei); - $lei->{opt}->{stdin} = 1 if !@inputs; $lei->{opt}->{'in-format'} //= 'eml'; # maybe it's a non-email (code) blob from a coderepo my $git_dirs = $lei->{opt}->{'git-dir'} //= []; diff --git a/lib/PublicInbox/LeiRm.pm b/lib/PublicInbox/LeiRm.pm index 185b6a15..c6d28045 100644 --- a/lib/PublicInbox/LeiRm.pm +++ b/lib/PublicInbox/LeiRm.pm @@ -31,7 +31,6 @@ sub input_maildir_cb { sub lei_rm { my ($lei, @inputs) = @_; $lei->_lei_store(1)->write_prepare($lei); - $lei->{opt}->{stdin} = 1 if !@inputs; $lei->{opt}->{'in-format'} //= 'eml'; my $self = bless { -wq_nr_workers => 1 }, __PACKAGE__; $self->prepare_inputs($lei, \@inputs) or return; diff --git a/t/lei-p2q.t b/t/lei-p2q.t index f8b073cf..58506f94 100644 --- a/t/lei-p2q.t +++ b/t/lei-p2q.t @@ -14,6 +14,10 @@ test_lei(sub { lei_ok([qw(p2q -w dfpost -)], undef, { %$lei_opt, 0 => $fh }); is($lei_out, "dfpost:6e006fd73b1d\n", '--stdin') or diag $lei_err; + sysseek($fh, 0, 0) or xbail "lseek: $!"; + lei_ok([qw(p2q -w dfpost)], undef, { %$lei_opt, 0 => $fh }); + is($lei_out, "dfpost:6e006fd73b1d\n", 'implicit --stdin'); + lei_ok(qw(p2q --uri t/data/0001.patch -w), 'dfpost,dfn'); is($lei_out, "dfpost%3A6e006fd73b1d+". "dfn%3Alib%2FPublicInbox%2FSearch.pm\n", -- cgit v1.2.3-24-ge0c7