about summary refs log tree commit homepage
diff options
context:
space:
mode:
-rw-r--r--lib/PublicInbox/IO.pm2
-rw-r--r--lib/PublicInbox/LEI.pm7
-rw-r--r--lib/PublicInbox/TestCommon.pm5
-rw-r--r--lib/PublicInbox/XapHelperCxx.pm18
-rw-r--r--t/extsearch.t3
-rw-r--r--t/io.t10
6 files changed, 25 insertions, 20 deletions
diff --git a/lib/PublicInbox/IO.pm b/lib/PublicInbox/IO.pm
index 11ce9be1..63ae3ef4 100644
--- a/lib/PublicInbox/IO.pm
+++ b/lib/PublicInbox/IO.pm
@@ -9,6 +9,8 @@ use PublicInbox::DS qw(awaitpid);
 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) = @_;
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 69065ce7..460aed40 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -9,7 +9,7 @@ package PublicInbox::LEI;
 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);
@@ -1099,8 +1099,8 @@ sub start_pager {
         $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
@@ -1580,7 +1580,6 @@ sub slurp_stdin {
         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'], {});
diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm
index a5546905..8bfa30f2 100644
--- a/lib/PublicInbox/TestCommon.pm
+++ b/lib/PublicInbox/TestCommon.pm
@@ -16,7 +16,7 @@ our @EXPORT;
 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));
 
@@ -670,7 +670,6 @@ sub test_lei {
 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);
@@ -801,7 +800,7 @@ sub create_coderepo ($$;@) {
         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";
         }
diff --git a/lib/PublicInbox/XapHelperCxx.pm b/lib/PublicInbox/XapHelperCxx.pm
index e516b111..1250c964 100644
--- a/lib/PublicInbox/XapHelperCxx.pm
+++ b/lib/PublicInbox/XapHelperCxx.pm
@@ -8,10 +8,11 @@
 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!/!-!;
@@ -39,25 +40,22 @@ EOM
 }
 
 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;
diff --git a/t/extsearch.t b/t/extsearch.t
index 1a1eb350..090f6db5 100644
--- a/t/extsearch.t
+++ b/t/extsearch.t
@@ -7,7 +7,7 @@ use PublicInbox::Config;
 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';
@@ -577,7 +577,6 @@ test_lei(sub {
         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"));
diff --git a/t/io.t b/t/io.t
index 3ea00ed8..91f93526 100644
--- a/t/io.t
+++ b/t/io.t
@@ -7,7 +7,7 @@ my $tmpdir = tmpdir;
 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) };
@@ -24,4 +24,12 @@ like($err, qr/\bclose\b/, 'close error noted');
 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;