our @EXPORT_OK = qw(poll_in read_all try_cat write_file);
use Carp qw(croak);
use IO::Poll qw(POLLIN);
+# don't autodie in top-level for Perl 5.16.3 (and maybe newer versions)
+# we have our own ->close, so we scope autodie into each sub
sub waitcb { # awaitpid callback
my ($pid, $errref, $cb, @args) = @_;
use v5.12;
use parent qw(PublicInbox::DS PublicInbox::LeiExternal
PublicInbox::LeiQuery);
-use autodie qw(bind chdir fork open socket socketpair syswrite unlink);
+use autodie qw(bind chdir fork open pipe socket socketpair syswrite unlink);
use Getopt::Long ();
use Socket qw(AF_UNIX SOCK_SEQPACKET pack_sockaddr_un);
use Errno qw(EPIPE EAGAIN ECONNREFUSED ENOENT ECONNRESET);
$new_env->{LESS} //= 'FRX';
$new_env->{LV} //= '-c';
$new_env->{MORE} = $new_env->{LESS} if $^O eq 'freebsd';
- pipe(my ($r, $wpager)) or return warn "pipe: $!";
- my $rdr = { 0 => $r, 1 => $self->{1}, 2 => $self->{2} };
+ my $rdr = { 1 => $self->{1}, 2 => $self->{2} };
+ CORE::pipe($rdr->{0}, my $wpager) or return warn "pipe: $!";
my $pgr = [ undef, @$rdr{1, 2} ];
my $env = $self->{env};
if ($self->{sock}) { # lei(1) process runs it
my $in = $lei->{0};
if (-t $in) { # run cat via script/lei and read from it
$in = undef;
- use autodie qw(pipe);
pipe($in, my $wr);
say { $lei->{2} } '# enter query, Ctrl-D when done';
send_exec_cmd($lei, [ $lei->{0}, $wr ], ['cat'], {});
my $lei_loud = $ENV{TEST_LEI_ERR_LOUD};
my $tail_cmd = $ENV{TAIL};
our ($lei_opt, $lei_out, $lei_err);
-use autodie qw(chdir close fcntl open opendir seek unlink);
+use autodie qw(chdir close fcntl mkdir open opendir seek unlink);
$_ = File::Spec->rel2abs($_) for (grep(!m!^/!, @INC));
SKIP: {
my ($cb) = pop @_;
my $test_opt = shift // {};
- use autodie qw(mkdir);
require_git(2.6, 1);
my $mods = $test_opt->{mods} // [ 'lei' ];
require_mods(@$mods, 2);
my ($db) = (PublicInbox::Import::default_branch() =~ m!([^/]+)\z!);
my $dir = "t/data-gen/$base.$ident-$db";
my $new = !-d $dir;
- if ($new && !mkdir($dir)) {
+ if ($new && !CORE::mkdir($dir)) {
my $err = $!;
-d $dir or xbail "mkdir($dir): $err";
}
package PublicInbox::XapHelperCxx;
use v5.12;
use PublicInbox::Spawn qw(run_die run_qx which);
-use PublicInbox::IO qw(read_all write_file);
+use PublicInbox::IO qw(read_all try_cat write_file);
use PublicInbox::Search;
use Fcntl qw(SEEK_SET);
use Config;
+use autodie;
my $cxx = which($ENV{CXX} // 'c++');
my $dir = substr("$cxx-$Config{archname}", 1); # drop leading '/'
$dir =~ tr!/!-!;
}
sub needs_rebuild () {
- open my $fh, '<', "$dir/XFLAGS" or return 1;
- chomp(my $prev = read_all($fh));
+ my $prev = try_cat("$dir/XFLAGS") or return 1;
+ chomp $prev;
return 1 if $prev ne $xflags;
- open $fh, '<', "$dir/xap_modversion" or return 1;
- chomp($prev = read_all($fh));
- $prev or return 1;
+ $prev = try_cat("$dir/xap_modversion") or return 1;
+ chomp $prev;
$xap_modversion = xap_cfg('--modversion');
$xap_modversion ne $prev;
}
sub build () {
- if (!-d $dir) {
- my $err;
- mkdir($dir) or $err = $!;
+ if (!-d $dir && !CORE::mkdir($dir)) {
+ my $err = $!;
die "mkdir($dir): $err" if !-d $dir;
}
- use autodie;
require PublicInbox::CodeSearch;
require PublicInbox::Lock;
require PublicInbox::OnDestroy;
use PublicInbox::InboxWritable;
require_git(2.6);
require_mods(qw(json DBD::SQLite Xapian));
-use autodie qw(open rename truncate);
+use autodie qw(open rename truncate unlink);
require PublicInbox::Search;
use_ok 'PublicInbox::ExtSearch';
use_ok 'PublicInbox::ExtSearchIdx';
is_deeply($dst, \@md1,
"convert from extindex w/ or w/o `extindex' prefix");
- use autodie qw(unlink);
my @o = glob "$home/extindex/ei*/over.sqlite*";
unlink(@o);
ok(!lei('convert', '-o', "$home/fail", "extindex:$d"));
use_ok 'PublicInbox::IO';
use PublicInbox::Spawn qw(which run_qx);
-# only test failures
+# test failures:
SKIP: {
my $strace = strace_inject;
my $env = { PERL5LIB => join(':', @INC) };
is(-s $dst, 0, 'file created and empty after EIO');
} # /SKIP
+PublicInbox::IO::write_file '>:unix', "$tmpdir/f", "HI\n";
+is(-s "$tmpdir/f", 3, 'write_file works w/ IO layer');
+PublicInbox::IO::write_file '>>', "$tmpdir/f", "HI\n";
+is(-s "$tmpdir/f", 6, 'write_file can append');
+
+is PublicInbox::IO::try_cat("$tmpdir/non-existent"), '',
+ "try_cat on non-existent file returns `'";
+
done_testing;