From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, T_SCC_BODY_TEXT_LINE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id DD1CE1F406 for ; Wed, 22 Nov 2023 00:13:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1700612011; bh=oo32odonGcbrOI8YUSTY6d50GIVbLVK438E02mZkJqk=; h=From:To:Subject:Date:From; b=ujaCzoJGJPrWMM0dFXcKToc3dfJLvHbePCkiPO0wTTJvJNovAamjvlVqAxTu5QYPM BACDCP/n/EgbRSdYF+ZGIoZxvNypLlormd1JUYv99zlPIf/BA1oZhtoFXW5os+DT0O W3QTtvFPwSjrjq6azAOq2K5N9SamScjiFuIAdJ3w= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] lei_to_mail: don't close STDOUT unless it is a mbox* output Date: Wed, 22 Nov 2023 00:13:31 +0000 Message-Id: <20231122001331.1837369-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We only care about error checking when stdout is an mbox output pointed to a pathname. This is noticeable with `lei up' with multiple non-mbox* destinations. We'll also ensure throwing exceptions to trigger lei->x_it from lei->do_env results in the epoll/kqueue watch being discarded, otherwise commands may never terminate (leading to stuck tests) --- lib/PublicInbox/LEI.pm | 1 + lib/PublicInbox/LeiToMail.pm | 4 ++-- t/lei-q-save.t | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 8d235b37..86b71fcd 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -493,6 +493,7 @@ sub x_it ($$) { } elsif ($quit == \&CORE::exit) { # an admin (one-shot) command exit($code >> 8); } # else ignore if client disconnected + $self->dclose if $$ == $daemon_pid; } sub err ($;@) { diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index 007191bb..a930fc30 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -612,8 +612,8 @@ sub _pre_augment_mbox { sub finish_output { my ($self, $lei) = @_; my $out = delete $lei->{1} // die 'BUG: no lei->{1}'; - my $old = delete $lei->{old_1}; - $lei->{1} = $old if $old; + my $old = delete $lei->{old_1} or return; # path only + $lei->{1} = $old; return if $out->close; # reaps gzip|pigz|xz|bzip2 my $msg = "E: Error closing $lei->{ovv}->{dst}"; $? ? $lei->child_error($?) : ($msg .= " ($!)"); diff --git a/t/lei-q-save.t b/t/lei-q-save.t index a9f9d4d6..0970bc3c 100644 --- a/t/lei-q-save.t +++ b/t/lei-q-save.t @@ -305,5 +305,7 @@ EOM is(scalar(@new), 2, 'got new message'); is_xdeeply([grep { $_ eq $orig[0] } @new], \@orig, 'original message preserved on up w/ threads'); + lei_ok 'up', "$home/md", $d, \'multiple maildir up'; + unlike $lei_err, qr! line \d+!s, 'no warnings'; }); done_testing;