From: Eric Wong Date: Wed, 25 Aug 2021 08:40:39 +0000 (+0000) Subject: lei up: improve --all=local stderr output X-Git-Tag: v1.7.0~493 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=b6eb866869609afef72c77f41507905828014673 lei up: improve --all=local stderr output 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. --- 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;