From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH] index: "git log" failures are fatal
Date: Mon, 4 Nov 2019 00:43:14 +0000 [thread overview]
Message-ID: <20191104004314.3220-1-e@80x24.org> (raw)
While I've never seen "git log" fail on its own, it could happen
one day and we should be prepared to abort indexing when it
happens.
Beef up tests for t/spawn.t to ensure close() behaves
on popen_rd the way we expect it to.
---
lib/PublicInbox/SearchIdx.pm | 8 ++++++--
lib/PublicInbox/V2Writable.pm | 5 +++--
t/spawn.t | 4 ++--
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index b2d71a1f..f265fa7f 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -590,6 +590,7 @@ sub read_log {
$newest ||= $latest;
}
}
+ close($log) or die "git log failed: \$?=$?";
# get the leftovers
foreach my $blob (keys %D) {
my $mime = do_cat_mail($git, $blob, \$bytes) or next;
@@ -632,7 +633,7 @@ sub _git_log {
--no-notes --no-color --no-renames
--diff-filter=AM), $range);
++$fcount while <$fh>;
- close $fh;
+ close $fh or die "git log failed: \$?=$?";
my $high = $self->{mm}->num_highwater;
$pr->("$fcount\n") if $pr; # continue previous line
$self->{ntodo} = $fcount;
@@ -713,7 +714,10 @@ sub _index_sync {
my $xdb = $self->begin_txn_lazy;
my $mm = _msgmap_init($self);
do {
- $xlog = undef;
+ if ($xlog) {
+ close($xlog) or die "git log failed: \$?=$?";
+ $xlog = undef;
+ }
$last_commit = _last_x_commit($self, $mm);
$lx = reindex_from($opts->{reindex}, $last_commit);
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index 1825da2c..02f313b0 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -1128,6 +1128,7 @@ sub sync_prepare ($$$) {
--no-notes --no-color --no-renames
--diff-filter=AM), $range, '--', 'm');
++$n while <$fh>;
+ close $fh or die "git log failed: \$?=$?";
$pr->("$n\n") if $pr;
$regen_max += $n;
}
@@ -1195,7 +1196,7 @@ sub unindex ($$$$) {
unindex_oid($self, $git, $1, $unindexed);
}
delete $self->{reindex_pipe};
- $fh = undef;
+ close $fh or die "git log failed: \$?=$?";
return unless $sync->{-opt}->{prune};
my $after = scalar keys %$unindexed;
@@ -1251,7 +1252,7 @@ sub index_epoch ($$$) {
mark_deleted($self, $sync, $git, $1);
}
}
- $fh = undef;
+ close $fh or die "git log failed: \$?=$?";
delete $self->{reindex_pipe};
update_last_commit($self, $git, $i, $cmt) if defined $cmt;
}
diff --git a/t/spawn.t b/t/spawn.t
index aba1a26c..ebebfb57 100644
--- a/t/spawn.t
+++ b/t/spawn.t
@@ -71,13 +71,13 @@ use PublicInbox::Spawn qw(which spawn popen_rd);
is($buf, "hello\n", 'tied gets works');
is(sysread($fh, $buf, 6), 0, 'sysread got EOF');
$? = 1;
- close $fh;
+ ok(close($fh), 'close succeeds');
is($?, 0, '$? set properly');
}
{
my $fh = popen_rd([qw(false)]);
- close $fh;
+ ok(!close($fh), 'close fails on false');
isnt($?, 0, '$? set properly: '.$?);
}
reply other threads:[~2019-11-04 0:43 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://public-inbox.org/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191104004314.3220-1-e@80x24.org \
--to=e@80x24.org \
--cc=meta@public-inbox.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).