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-ASN: 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 3FA231F9FE for ; Sun, 30 May 2021 06:33:59 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 4/4] lei: support implicit stdin by default Date: Sun, 30 May 2021 06:33:58 +0000 Message-Id: <20210530063358.25095-5-e@80x24.org> In-Reply-To: <20210530063358.25095-1-e@80x24.org> References: <20210530063358.25095-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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",