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 1E4CB1F5AE for ; Mon, 26 Apr 2021 08:43:23 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] lei p2q: exit with failure if format-patch fails Date: Mon, 26 Apr 2021 08:43:23 +0000 Message-Id: <20210426084323.22239-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Merely redirecting the failure message from git to our stderr is insufficient. --- lib/PublicInbox/LeiP2q.pm | 7 +++++-- t/lei-p2q.t | 4 +++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/LeiP2q.pm b/lib/PublicInbox/LeiP2q.pm index a8a3dd2c..cb2309c7 100644 --- a/lib/PublicInbox/LeiP2q.pm +++ b/lib/PublicInbox/LeiP2q.pm @@ -105,6 +105,7 @@ sub do_p2q { # via wq_do } my $smsg = bless {}, 'PublicInbox::Smsg'; my $in = $self->{0}; + my @cmd; unless ($in) { my $input = $self->{input}; my $devfd = $lei->path_to_fd($input) // return; @@ -114,11 +115,13 @@ sub do_p2q { # via wq_do open($in, '<', $input) or return $lei->fail("open < $input: $!"); } else { - my @cmd = (qw(git format-patch --stdout -1), $input); + @cmd = (qw(git format-patch --stdout -1), $input); $in = popen_rd(\@cmd, undef, { 2 => $lei->{2} }); } }; - my $eml = PublicInbox::Eml->new(\(do { local $/; <$in> })); + my $str = do { local $/; <$in> }; + @cmd && !close($in) and return $lei->fail("E: @cmd failed: $?"); + my $eml = PublicInbox::Eml->new(\$str); $lei->{diff_want} = +{ map { $_ => 1 } @want }; $smsg->populate($eml); while (my ($pfx, $fields) = each %pfx2smsg) { diff --git a/t/lei-p2q.t b/t/lei-p2q.t index 87cf9fa7..be2d437c 100644 --- a/t/lei-p2q.t +++ b/t/lei-p2q.t @@ -6,9 +6,11 @@ require_git 2.6; require_mods(qw(json DBD::SQLite Search::Xapian)); test_lei(sub { + ok(!lei(qw(p2q this-better-cause-format-patch-to-fail)), + 'p2q fails on bogus arg'); lei_ok(qw(p2q -w dfpost t/data/0001.patch)); is($lei_out, "dfpost:6e006fd73b1d\n", 'pathname'); - open my $fh, '+<', 't/data/0001.patch'; + open my $fh, '+<', 't/data/0001.patch' or xbail "open: $!"; lei_ok([qw(p2q -w dfpost -)], undef, { %$lei_opt, 0 => $fh }); is($lei_out, "dfpost:6e006fd73b1d\n", '--stdin');