$u eq 'u' or warn "E: recv $v has no umask";
}
+sub _stdin_cb { # PublicInbox::InputPipe::consume callback for --stdin
+ my ($lei, $cb) = @_; # $_[-1] = $rbuf
+ $_[1] // return $lei->fail("error reading stdin: $!");
+ $lei->{stdin_buf} .= $_[-1];
+ do_env($lei, $cb) if $_[-1] eq '';
+}
+
+sub slurp_stdin {
+ my ($lei, $cb) = @_;
+ require PublicInbox::InputPipe;
+ PublicInbox::InputPipe::consume($lei->{0}, \&_stdin_cb, $lei, $cb);
+}
+
1;
sub do_inspect { # lei->do_env cb
my ($lei) = @_;
- my $str = delete $lei->{istr};
+ my $str = delete $lei->{stdin_buf};
PublicInbox::Eml::strip_from($str);
my $eml = PublicInbox::Eml->new(\$str);
inspect_start($lei, [ 'blob:'.$lei->git_oid($eml)->hexdigest,
map { "mid:$_" } @{mids($eml)} ]);
}
-sub ins_add { # InputPipe->consume callback
- my ($lei) = @_; # $_[1] = $rbuf
- $_[1] // return $lei->fail("error reading stdin: $!");
- return $lei->{istr} .= $_[1] if $_[1] ne '';
- $lei->do_env(\&do_inspect);
-}
-
sub lei_inspect {
my ($lei, @argv) = @_;
$lei->{json} = ref(PublicInbox::Config::json())->new->utf8->canonical;
return $lei->fail(<<'') if @argv;
no args allowed on command-line with --stdin
- require PublicInbox::InputPipe;
- PublicInbox::InputPipe::consume($lei->{0}, \&ins_add, $lei);
+ $lei->slurp_stdin(\&do_inspect);
} else {
inspect_start($lei, \@argv);
}
sub do_lcat { # lei->do_env cb
my ($lei) = @_;
- my @argv = split(/\s+/, $lei->{mset_opt}->{qstr});
+ my @argv = split(/\s+/, delete($lei->{stdin_buf}));
$lei->{mset_opt}->{qstr} = extract_all($lei, @argv) or return;
$lei->_start_query;
}
-sub _stdin { # PublicInbox::InputPipe::consume callback for --stdin
- my ($lei) = @_; # $_[1] = $rbuf
- $_[1] // return $lei->fail("error reading stdin: $!");
- return $lei->{mset_opt}->{qstr} .= $_[1] if $_[1] ne '';
- $lei->do_env(\&do_lcat);
-}
-
sub lei_lcat {
my ($lei, @argv) = @_;
my $lxs = $lei->lxs_prepare or return;
return $lei->fail(<<'') if @argv;
no args allowed on command-line with --stdin
- require PublicInbox::InputPipe;
- PublicInbox::InputPipe::consume($lei->{0}, \&_stdin, $lei);
- return;
+ return $lei->slurp_stdin(\&do_lcat);
}
$lei->{mset_opt}->{qstr} = extract_all($lei, @argv) or return;
$lei->_start_query;
sub do_qry { # do_env cb
my ($lei) = @_;
- $lei->{mset_opt}->{q_raw} = $lei->{mset_opt}->{qstr};
+ $lei->{mset_opt}->{q_raw} = $lei->{mset_opt}->{qstr}
+ = delete $lei->{stdin_buf};
$lei->{lse}->query_approxidate($lei->{lse}->git,
$lei->{mset_opt}->{qstr});
_start_query($lei);
}
-sub qstr_add { # PublicInbox::InputPipe::consume callback for --stdin
- my ($lei) = @_; # $_[1] = $rbuf
- $_[1] // $lei->fail("error reading stdin: $!");
- return $lei->{mset_opt}->{qstr} .= $_[1] if $_[1] ne '';
- $lei->do_env(\&do_qry);
-}
-
# make the URI||PublicInbox::{Inbox,ExtSearch} a config-file friendly string
sub cfg_ext ($) {
my ($x) = @_;
return $self->fail(<<'') if @argv;
no query allowed on command-line with --stdin
- require PublicInbox::InputPipe;
- PublicInbox::InputPipe::consume($self->{0}, \&qstr_add, $self);
- return;
+ return $self->slurp_stdin(\&do_qry);
}
chomp(@argv) and $self->qerr("# trailing `\\n' removed");
$mset_opt{q_raw} = [ @argv ]; # copy
}
lei_ok('sucks', \'yes, but hopefully less every day');
like($lei_out, qr/loaded features/, 'loaded features shown');
+
+ lei_ok([qw(q --stdin -f text)], undef, { 0 => \'', %$lei_opt });
+ is($lei_err, '', 'no errors on empty stdin');
+ is($lei_out, '', 'no output on empty query');
+
SKIP: {
skip 'no curl', 3 unless require_cmd('curl', 1);
lei(qw(q --only http://127.0.0.1:99999/bogus/ t:m));