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,AWL,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 EEF141FD57 for ; Sat, 11 Jan 2020 22:35:04 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 6/9] xapcmd: use popen_rd for running xapian-compact Date: Sat, 11 Jan 2020 22:35:00 +0000 Message-Id: <20200111223503.24473-7-e@yhbt.net> In-Reply-To: <20200111223503.24473-1-e@yhbt.net> References: <20200111223503.24473-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: public-inbox-compact wrapper displays progress by default, anyways, and there's not a lot of output, so simplify our code by using popen_rd instead of spawn + optional pipe. While we're at it use "while ()" to display progress as it happens, since "foreach (<$HANDLE>)" slurps the contents into an array, first. --- lib/PublicInbox/Xapcmd.pm | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/PublicInbox/Xapcmd.pm b/lib/PublicInbox/Xapcmd.pm index 4871378e..de2ef5c6 100644 --- a/lib/PublicInbox/Xapcmd.pm +++ b/lib/PublicInbox/Xapcmd.pm @@ -3,7 +3,7 @@ package PublicInbox::Xapcmd; use strict; use warnings; -use PublicInbox::Spawn qw(which spawn); +use PublicInbox::Spawn qw(which popen_rd); use PublicInbox::Over; use PublicInbox::SearchIdx; use File::Temp 0.19 (); # ->newdir @@ -277,7 +277,6 @@ sub compact ($$) { my ($args, $opt) = @_; my ($src, $newdir) = @$args; my $dst = ref($newdir) ? $newdir->dirname : $newdir; - my ($r, $w); my $pfx = $opt->{-progress_pfx} ||= progress_pfx($src); my $pr = $opt->{-progress}; my $rdr = {}; @@ -286,7 +285,6 @@ sub compact ($$) { defined(my $dfd = $opt->{$fd}) or next; $rdr->{$fd} = $dfd; } - $rdr->{1} = $w if $pr && pipe($r, $w); # we rely on --no-renumber to keep docids synched to NNTP my $cmd = [ $XAPIAN_COMPACT, '--no-renumber' ]; @@ -299,18 +297,14 @@ sub compact ($$) { } $pr->("$pfx `".join(' ', @$cmd)."'\n") if $pr; push @$cmd, $src, $dst; - my $pid = spawn($cmd, undef, $rdr); - if ($pr) { - close $w or die "close: \$w: $!"; - foreach (<$r>) { + my $rd = popen_rd($cmd, undef, $rdr); + while (<$rd>) { + if ($pr) { s/\r/\r$pfx /g; $pr->("$pfx $_"); } } - my $rp = waitpid($pid, 0); - if ($? || $rp != $pid) { - die join(' ', @$cmd)." failed: $? (pid=$pid, reaped=$rp)\n"; - } + close $rd or die join(' ', @$cmd)." failed: $?n"; } sub cpdb_loop ($$$;$$) {