From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 1DF491F8C7 for ; Wed, 25 Aug 2021 08:40:41 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 1/2] lei up: improve --all=local stderr output Date: Wed, 25 Aug 2021 08:40:39 +0000 Message-Id: <20210825084040.28346-2-e@80x24.org> In-Reply-To: <20210825084040.28346-1-e@80x24.org> References: <20210825084040.28346-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: The "# $NR written to $DEST ($total matches)" messages are arguably the most useful output of "lei up --all=local", but they get intermixed with progress messages from various workers. Queue up these finalization messages and only spit them out on ->DESTROY. --- MANIFEST | 1 + lib/PublicInbox/LEI.pm | 6 ++++++ lib/PublicInbox/LeiFinmsg.pm | 21 +++++++++++++++++++++ lib/PublicInbox/LeiUp.pm | 2 ++ lib/PublicInbox/LeiXSearch.pm | 9 ++++++--- 5 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 lib/PublicInbox/LeiFinmsg.pm diff --git a/MANIFEST b/MANIFEST index fb9f16bf..cf7268ed 100644 --- a/MANIFEST +++ b/MANIFEST @@ -208,6 +208,7 @@ lib/PublicInbox/LeiDedupe.pm lib/PublicInbox/LeiEditSearch.pm lib/PublicInbox/LeiExportKw.pm lib/PublicInbox/LeiExternal.pm +lib/PublicInbox/LeiFinmsg.pm lib/PublicInbox/LeiForgetMailSync.pm lib/PublicInbox/LeiForgetSearch.pm lib/PublicInbox/LeiHelp.pm diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 5694e92c..28fe0c83 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -486,6 +486,12 @@ sub err ($;@) { sub qerr ($;@) { $_[0]->{opt}->{quiet} or err(shift, @_) } +sub qfin { # show message on finalization (LeiFinmsg) + my ($lei, $msg) = @_; + return if $lei->{opt}->{quiet}; + $lei->{fmsg} ? push(@{$lei->{fmsg}}, "$msg\n") : qerr($lei, $msg); +} + sub fail_handler ($;$$) { my ($lei, $code, $io) = @_; close($io) if $io; # needed to avoid warnings on SIGPIPE diff --git a/lib/PublicInbox/LeiFinmsg.pm b/lib/PublicInbox/LeiFinmsg.pm new file mode 100644 index 00000000..0ef5f070 --- /dev/null +++ b/lib/PublicInbox/LeiFinmsg.pm @@ -0,0 +1,21 @@ +# Copyright (C) all contributors +# License: AGPL-3.0+ + +# Finalization messages, used to queue up a bunch of messages which +# only get written out on ->DESTROY +package PublicInbox::LeiFinmsg; +use strict; +use v5.10.1; + +sub new { + my ($cls, $io) = @_; + bless [ $io ], $cls; +} + +sub DESTROY { + my ($self) = @_; + my $io = shift @$self; + print $io @$self; +} + +1; diff --git a/lib/PublicInbox/LeiUp.pm b/lib/PublicInbox/LeiUp.pm index ba11761a..85efd9f5 100644 --- a/lib/PublicInbox/LeiUp.pm +++ b/lib/PublicInbox/LeiUp.pm @@ -48,6 +48,8 @@ sub up1 ($$) { sub up1_redispatch { my ($lei, $out, $op_p) = @_; + require PublicInbox::LeiFinmsg; + $lei->{fmsg} //= PublicInbox::LeiFinmsg->new($lei->{2}); my $l = bless { %$lei }, ref($lei); $l->{opt} = { %{$l->{opt}} }; delete $l->{sock}; diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm index 1f83e582..b9f0d692 100644 --- a/lib/PublicInbox/LeiXSearch.pm +++ b/lib/PublicInbox/LeiXSearch.pm @@ -398,9 +398,12 @@ Error closing $lei->{ovv}->{dst}: $! if ($lei->{-progress}) { my $tot = $lei->{-mset_total} // 0; my $nr = $lei->{-nr_write} // 0; - $lei->qerr($l2m ? - "# $nr written to $lei->{ovv}->{dst} ($tot matches)" : - "# $tot matches"); + if ($l2m) { + $lei->qfin("# $nr written to " . + "$lei->{ovv}->{dst} ($tot matches)"); + } else { + $lei->qerr("# $tot matches"); + } } $lei->start_mua if $start_mua; $lei->dclose;