]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/V2Writable.pm
get rid of unnecessary bytes::length usage
[public-inbox.git] / lib / PublicInbox / V2Writable.pm
index 0461257feb7b483329d09f4b0e5e75f9b5913b0d..1288f47ba47013fb363030d4119d9e8e1149efe7 100644 (file)
@@ -6,14 +6,14 @@
 package PublicInbox::V2Writable;
 use strict;
 use v5.10.1;
-use parent qw(PublicInbox::Lock);
+use parent qw(PublicInbox::Lock PublicInbox::IPC);
 use PublicInbox::SearchIdxShard;
 use PublicInbox::IPC;
 use PublicInbox::Eml;
 use PublicInbox::Git;
 use PublicInbox::Import;
 use PublicInbox::MID qw(mids references);
-use PublicInbox::ContentHash qw(content_hash content_digest);
+use PublicInbox::ContentHash qw(content_hash content_digest git_sha);
 use PublicInbox::InboxWritable;
 use PublicInbox::OverIdx;
 use PublicInbox::Msgmap;
@@ -54,14 +54,14 @@ sub nproc_shards ($) {
 
 sub count_shards ($) {
        my ($self) = @_;
+       # always load existing shards in case core count changes:
+       # Also, shard count may change while -watch is running
        if (my $ibx = $self->{ibx}) {
-               # always load existing shards in case core count changes:
-               # Also, shard count may change while -watch is running
                my $srch = $ibx->search or return 0;
                delete $ibx->{search};
                $srch->{nshard} // 0
        } else { # ExtSearchIdx
-               $self->{nshard} ||= scalar($self->xdb_shards_flat);
+               $self->{nshard} = scalar($self->xdb_shards_flat);
        }
 }
 
@@ -447,23 +447,6 @@ sub purge {
        $rewritten->{rewrites}
 }
 
-# returns the git object_id of $fh, does not write the object to FS
-sub git_hash_raw ($$) {
-       my ($self, $raw) = @_;
-       # grab the expected OID we have to reindex:
-       pipe(my($in, $w)) or die "pipe: $!";
-       my $git_dir = $self->git->{git_dir};
-       my $cmd = ['git', "--git-dir=$git_dir", qw(hash-object --stdin)];
-       my $r = popen_rd($cmd, undef, { 0 => $in });
-       print $w $$raw or die "print \$w: $!";
-       close $w or die "close \$w: $!";
-       local $/ = "\n";
-       chomp(my $oid = <$r>);
-       close $r or die "git hash-object failed: $?";
-       $oid =~ /\A$OID\z/ or die "OID not expected: $oid";
-       $oid;
-}
-
 sub _check_mids_match ($$$) {
        my ($old_list, $new_list, $hdrs) = @_;
        my %old_mids = map { $_ => 1 } @$old_list;
@@ -498,7 +481,7 @@ sub replace ($$$) {
        PublicInbox::Import::drop_unwanted_headers($new_mime);
 
        my $raw = $new_mime->as_string;
-       my $expect_oid = git_hash_raw($self, \$raw);
+       my $expect_oid = git_sha(1, \$raw)->hexdigest;
        my $rewritten = _replace($self, $old_mime, $new_mime, \$raw) or return;
        my $need_reindex = $rewritten->{need_reindex};
 
@@ -1296,7 +1279,7 @@ sub index_todo ($$$) {
 
 sub xapian_only {
        my ($self, $opt, $sync, $art_beg) = @_;
-       my $seq = $opt->{sequential_shard};
+       my $seq = $opt->{'sequential-shard'};
        $art_beg //= 0;
        local $self->{parallel} = 0 if $seq;
        $self->idx_init($opt); # acquire lock
@@ -1346,7 +1329,7 @@ sub index_sync {
        }
 
        my $pr = $opt->{-progress};
-       my $seq = $opt->{sequential_shard};
+       my $seq = $opt->{'sequential-shard'};
        my $art_beg; # the NNTP article number we start xapian_only at
        my $idxlevel = $self->{ibx}->{indexlevel};
        local $self->{ibx}->{indexlevel} = 'basic' if $seq;
@@ -1431,4 +1414,14 @@ W: interrupted, --xapian-only --reindex required upon restart
 EOF
 }
 
+sub ipc_atfork_child {
+       my ($self) = @_;
+       if (my $lei = delete $self->{lei}) {
+               $lei->_lei_atfork_child;
+               my $pkt_op_p = delete $lei->{pkt_op_p};
+               close($pkt_op_p->{op_p});
+       }
+       $self->SUPER::ipc_atfork_child;
+}
+
 1;