]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
idx_stack: use autodie + read_all
authorEric Wong <e@80x24.org>
Tue, 17 Oct 2023 23:38:15 +0000 (23:38 +0000)
committerEric Wong <e@80x24.org>
Wed, 18 Oct 2023 20:50:44 +0000 (20:50 +0000)
We'll also add a note to support multi-hash git repos once git
itself gains that ability.

lib/PublicInbox/IdxStack.pm

index 54d480bdd3710fe8ffa2418c665313d609688d27..cc9e0125d35711342949a95511eff0da8415d7a7 100644 (file)
@@ -1,16 +1,18 @@
-# Copyright (C) 2020-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 
 # temporary stack for public-inbox-index
+# FIXME: needs to support multi-hash in the same repo once git itself can
 package PublicInbox::IdxStack;
-use v5.10.1;
-use strict;
+use v5.12;
 use Fcntl qw(:seek);
 use constant PACK_FMT => eval { pack('Q', 1) } ? 'A1QQH*H*' : 'A1IIH*H*';
+use autodie qw(open seek);
+use PublicInbox::Git qw(read_all);
 
 # start off in write-only mode
 sub new {
-       open(my $io, '+>', undef) or die "open: $!";
+       open(my $io, '+>', undef);
        # latest_cmt is still useful when the newest revision is a `d'(elete),
        # otherwise we favor $sync->{latest_cmt} for checkpoints and {quit}
        bless { wr => $io, latest_cmt => $_[1] }, __PACKAGE__
@@ -27,7 +29,7 @@ sub push_rec {
                $self->{rec_size} = length($rec);
                $self->{unpack_fmt} = $fmt;
        };
-       print { $self->{wr} } $rec or die "print: $!";
+       print { $self->{wr} } $rec;
        $self->{tot_size} += length($rec);
 }
 
@@ -49,12 +51,8 @@ sub pop_rec {
        my $sz = $self->{rec_size} or return;
        my $rec_pos = $self->{tot_size} -= $sz;
        return if $rec_pos < 0;
-       my $io = $self->{rd};
-       seek($io, $rec_pos, SEEK_SET) or die "seek: $!";
-       my $r = read($io, my $buf, $sz);
-       defined($r) or die "read: $!";
-       $r == $sz or die "read($r != $sz)";
-       unpack($self->{unpack_fmt}, $buf);
+       seek($self->{rd}, $rec_pos, SEEK_SET);
+       unpack($self->{unpack_fmt}, read_all($self->{rd}, $sz));
 }
 
 1;