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-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 5E6061FB0E for ; Thu, 25 Mar 2021 04:20:27 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 05/10] lei_mirror: don't show success on failure Date: Thu, 25 Mar 2021 06:20:21 +0200 Message-Id: <20210325042026.11270-6-e@80x24.org> In-Reply-To: <20210325042026.11270-1-e@80x24.org> References: <20210325042026.11270-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: While we were exiting with a error code, showing a successful "# mirrored $URL" message is misleading and wrong. Don't show success until everything is complete and the config is written. --- lib/PublicInbox/LeiMirror.pm | 11 ++++++++--- t/lei-mirror.t | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index d68cd6c1..c83386c6 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -12,8 +12,14 @@ use PublicInbox::Spawn qw(popen_rd spawn); sub do_finish_mirror { # dwaitpid callback my ($arg, $pid) = @_; my ($mrr, $lei) = @$arg; - if ($? == 0 && unlink("$mrr->{dst}/mirror.done")) { + my $f = "$mrr->{dst}/mirror.done"; + if ($?) { + $lei->child_error($?); + } elsif (!unlink($f)) { + $lei->err("unlink($f): $!"); + } else { $lei->add_external_finish($mrr->{dst}); + $lei->qerr("# mirrored $mrr->{src} => $mrr->{dst}"); } $lei->dclose; } @@ -262,8 +268,7 @@ sub do_mirror { # via wq_io_do return start_clone_url($self) if $self->{src} =~ m!://!; die "TODO: cloning local directories not supported, yet"; }; - return $lei->fail($@) if $@; - $lei->qerr("# mirrored $self->{src} => $self->{dst}"); + $lei->fail($@) if $@; } sub start { diff --git a/t/lei-mirror.t b/t/lei-mirror.t index 9769f31b..6039e568 100644 --- a/t/lei-mirror.t +++ b/t/lei-mirror.t @@ -41,6 +41,24 @@ test_lei({ tmpdir => $tmpdir }, sub { ok(!-d "$t2-fail", 'destination not created on failure'); lei_ok('ls-external'); unlike($lei_out, qr!\Q$t2-fail\E!, 'not added to ls-external'); + + my %phail = ( + HTTPS => 'https://public-inbox.org/' . 'phail', + ONION => 'http://ou63pmih66umazou.onion/' . 'phail,' + ); + for my $t (qw(HTTPS ONION)) { + SKIP: { + my $k = "TEST_LEI_EXTERNAL_$t"; + $ENV{$k} or skip "$k unset", 1; + my $url = $phail{$t}; + my $dir = "phail-$t"; + ok(!lei(qw(add-external -Lmedium --mirror), + $url, $dir), '--mirror non-existent v2'); + is($? >> 8, 22, 'curl 404'); + ok(!-d $dir, 'directory not created'); + unlike($lei_err, qr/# mirrored/, 'no success message'); + } # SKIP + } # for }); ok($td->kill, 'killed -httpd');