push(@cmd, '-f', $file) if !@opt_c && defined($file);
my $fh = popen_rd(\@cmd, \%env, $opt);
my $rv = config_fh_parse($fh, "\0", "\n");
- close $fh or die "@cmd failed: \$?=$?\n";
+ $fh->close or die "@cmd failed: \$?=$?\n";
$rv->{-opt_c} = \@opt_c if @opt_c; # for ->urlmatch
$rv->{-f} = $file;
bless $rv, $class;
close $in_w or die "close (git credential $op): $!";
return $out_r if $op eq 'fill';
<$out_r> and die "unexpected output from `git credential $op'\n";
- close $out_r or die "`git credential $op' failed: \$!=$! \$?=$?\n";
+ $out_r->close or die "`git credential $op' failed: \$!=$! \$?=$?\n";
}
sub check_netrc {
/\A([^=]+)=(.*)\z/ or die "bad line: $_\n";
$self->{$1} = $2;
}
- close $out_r or die "git credential fill failed: \$!=$! \$?=$?\n";
+ $out_r->close or die "git credential fill failed: \$!=$! \$?=$?\n";
$self->{filled} = 1;
}
my $io = delete $self->{io} or return;
eval {
print $io "done\n" or wfail;
- close $io; # reaps and dies on error
+ $io->close or croak "close fast-import \$?=$?"; # reaps
};
my $wait_err = $@;
my $nchg = delete $self->{nchg};
die $wait_err if $wait_err;
}
-sub atfork_child { close(delete($_[0]->{io}) // return) }
+sub atfork_child { (delete($_[0]->{io}) // return)->close }
sub digest2mid ($$;$) {
my ($dig, $hdr, $fallback_time) = @_;
push @buf, $_;
}
}
- close $rd;
+ $rd->close or die "E: git @export (\$?=$?)";
if (@buf) {
print $io @buf or wfail;
}
my @eor = (substr($_[-1]//'', -1, 1) eq "\n" ? () : ("\n"));
print $err @_, @eor and return;
my $old_err = delete $self->{2};
- close($old_err) if $! == EPIPE && $old_err;
+ $old_err->close if $! == EPIPE && $old_err;
$err = $self->{2} = ($self->{pgr} // [])->[2] // *STDERR{GLOB};
print $err @_, @eor or print STDERR @_, @eor;
}
sub fail_handler ($;$$) {
my ($lei, $code, $io) = @_;
- close($io) if $io; # needed to avoid warnings on SIGPIPE
+ $io->close if $io; # needed to avoid warnings on SIGPIPE
_drop_wq($lei);
x_it($lei, $code // (1 << 8));
}
sub note_sigpipe { # triggers sigpipe_handler
my ($self, $fd) = @_;
- close(delete($self->{$fd})); # explicit close silences Perl warning
+ delete($self->{$fd})->close; # explicit close silences Perl warning
$self->{pkt_op_p}->pkt_do('sigpipe_handler') if $self->{pkt_op_p};
x_it($self, 13);
}
my ($self) = @_;
my $pgr = delete($self->{pgr}) or return;
$self->{2} = $pgr->[2];
- close(delete($self->{1})) if $self->{1};
+ delete($self->{1})->close if $self->{1};
$self->{1} = $pgr->[1];
}
my $fh = popen_rd($fp, undef, $rdr);
eval { $self->input_fh('eml', $fh, $input, @args) };
my @err = ($@ ? $@ : ());
- close($fh) or push @err, "\$?=$?";
+ $fh->close or push @err, "\$?=$?";
$lei->child_error($?, "@$fp failed: @err") if @err;
} else {
$self->folder_missing("$ifmt:$input");
qw(fast-import --quiet --done --date-format=raw)],
$lei->{env}, { 2 => $lei->{2} });
print $w $ta, "\n", $tb, "\ndone\n" or die "print fast-import: $!";
- close $w or die "close w fast-import: \$?=$? \$!=$!";
+ $w->close or die "close w fast-import: \$?=$? \$!=$!";
my $cmd = [ 'diff' ];
_lei_diff_prepare($lei, $cmd);
my @cmd = qw(git config -z --includes -l); # reuse normal git config
my $r = popen_rd(\@cmd, undef, { 2 => $lei->{2} });
my $cfg = PublicInbox::Config::config_fh_parse($r, "\0", "\n");
- if (!close($r)) {
+ if ($r->close) {
warn "# @cmd failed, no color (non-fatal \$?=$?)\n";
return $self;
}
$lei, $each_smsg);
$lei->sto_done_request if delete($self->{-sto_imported});
my $nr = delete $lei->{-nr_remote_eml} // 0;
- close $cfh;
+ $cfh->close;
my $code = $?;
if (!$code) { # don't update if no results, maybe MTA is down
$lei->{lss}->cfg_set($key, $start) if $key && $nr;
mset_progress($lei, $lei->{-current_url}, $nr, $nr);
next;
}
- close(delete($rdr->{2})) if @lbf_tee;
+ delete($rdr->{2})->close if @lbf_tee;
seek($cerr, 0, SEEK_SET);
read($cerr, my $err, -s $cerr);
truncate($cerr, 0);
$lei->{ovv}->ovv_end($lei);
if ($l2m) { # close() calls LeiToMail reap_compress
if (my $out = delete $lei->{old_1}) {
- if (my $mbout = $lei->{1}) {
- close($mbout) or die <<"";
+ if (my $mbout = $lei->{1}) { # compressor pipe process
+ $mbout->close or die <<"";
Error closing $lei->{ovv}->{dst}: \$!=$! \$?=$?
}
my @raw;
while (defined(my $r = read($mbfh, $buf, 65536, length($buf)))) {
if ($r == 0) { # close here to check for "curl --fail"
- close($mbfh) or die "error closing mbox: \$?=$? $!";
+ $mbfh->close or die "error closing mbox: \$?=$? $!";
@raw = ($buf);
} else {
@raw = split(/$from_strict/mos, $buf, -1);
my $buf = '';
while (defined(my $r = read($mbfh, $buf, 65536, length($buf)))) {
if ($r == 0) { # detect "curl --fail"
- close($mbfh) or
+ $mbfh->close or
die "error closing mboxcl/mboxcl2: \$?=$? $!";
undef $mbfh;
}
$stk->push_rec('m', $at, $ct, $oid, $cmt);
}
}
- close $fh or die "git log failed: \$?=$?";
+ $fh->close or die "git log failed: \$?=$?";
$stk //= PublicInbox::IdxStack->new;
$stk->read_prepare;
}
local $/;
$ret[0] = <$fh>;
}
- close $fh; # caller should check $?
+ $fh->close; # caller should check $?
read_out_err($opt);
wantarray ? @ret : $ret[0];
}
/\A:\d{6} 100644 $OID ($OID) [AM]\tm$/o or next;
$self->git->cat_async($1, $unindex_oid, { %$sync, oid => $1 });
}
- close $fh or die "git log failed: \$?=$?";
+ $fh->close or die "git log failed: \$?=$?";
$self->git->async_wait_all;
return unless $sync->{-opt}->{prune};
#!/usr/bin/perl -w
-# Copyright (C) 2018-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <http://www.gnu.org/licenses/agpl-3.0.txt>
use strict;
use v5.10.1;
last if $_ eq "done\n";
print $io $_ or $im->wfail;
}
-close $rd or die "fast-export: \$?=$? \$!=$!\n";
+$rd->close or die "fast-export: \$?=$? \$!=$!\n";
$io = undef;
$v2w->done;
if (my $old_mm = $old->mm) {
$n += $r;
$buf =~ /\A\0+\z/ or $non_zero++;
}
- close $fh or die "close curl pipe: $!";
+ $fh->close or die "close curl pipe: $!";
is($?, 0, 'curl succesful');
is($n, 30 * 1024 * 1024, 'got expected output from curl');
is($non_zero, 0, 'read all zeros');
#!perl -w
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
use strict; use v5.10.1; use PublicInbox::TestCommon;
use POSIX qw(mkfifo);
'--import-before fails on non-seekable output');
like($lei_err, qr/not seekable/, 'unseekable noted in error');
is(do { local $/; <$cat> }, '', 'no output on FIFO');
- close $cat;
+ $cat->close;
$cat = popen_rd(['cat', $o]);
lei_ok(qw(q m:qp@example.com -o), "mboxrd:$o");
my $buf = do { local $/; <$cat> };
is($rdy, 'RDY', 'got ready signal, waitpid(-1) works in child');
ok(kill('CHLD', $pid), 'sent SIGCHLD to child');
is(readline($rd), "HI\n", '$SIG{CHLD} works in child');
- ok(close $rd, 'popen_rd close works');
+ ok($rd->close, 'popen_rd close works');
PublicInbox::DS::sig_setmask($oldset);
}
is($buf, "hello\n", 'tied gets works');
is(sysread($fh, $buf, 6), 0, 'sysread got EOF');
$? = 1;
- ok(close($fh), 'close succeeds');
+ ok($fh->close, 'close succeeds');
is($?, 0, '$? set properly');
}
{
my $fh = popen_rd([qw(false)]);
- ok(!close($fh), 'close fails on false');
+ ok(!$fh->close, 'close fails on false');
isnt($?, 0, '$? set properly: '.$?);
}
{ # ->CLOSE vs ->DESTROY waitpid caller distinction
my @c;
my $fh = popen_rd(['true'], undef, undef, sub { @c = caller });
- ok(close($fh), '->CLOSE fired and successful');
+ ok($fh->close, '->CLOSE fired and successful');
ok(scalar(@c), 'callback fired by ->CLOSE');
ok(grep(!m[/PublicInbox/DS\.pm\z], @c), 'callback not invoked by DS');
my @w;
local $SIG{__WARN__} = sub { push @w, @_ };
close $w;
- close $fh;
+ $fh->close; # may set $?
is($?, 0, 'cat exited');
is(scalar(@arg), 2, 'callback got args');
is($arg[1], 'hi', 'passed arg');
my ($oid, undef, undef) = split(/ /);
$git->cat_async($oid, $cb);
}
- close $cat or die "cat: $?";
+ $cat->close or xbail "cat: $?";
$git->async_wait_all;
push @dig, ['async', $dig->hexdigest ];
});
my $bref = $git->cat_file($oid);
$dig->add($$bref);
}
- close $cat or die "cat: $?";
+ $cat->close or xbail "cat: $?";
push @dig, ['sync', $dig->hexdigest ];
});
}
my $res = $dig->hexdigest;
my $elapsed = sprintf('%0.3f', now() - $t0);
- close $rd or die "close curl failed: $! \$?=$?\n";
+ $rd->close or xbail "close curl failed: $! \$?=$?\n";
print STDERR "# $job $$ ($?) $res (${elapsed}s) $bytes bytes\n";
$res;
};