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;
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);
}
}
$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;
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};
sub write_alternates ($$$) {
my ($info_dir, $mode, $out) = @_;
- my $fh = File::Temp->new(TEMPLATE => 'alt-XXXXXXXX', DIR => $info_dir);
+ my $fh = File::Temp->new(TEMPLATE => 'alt-XXXX', DIR => $info_dir);
my $tmp = $fh->filename;
print $fh @$out or die "print $tmp: $!\n";
chmod($mode, $fh) or die "fchmod $tmp: $!\n";
sub diff ($$$) {
my ($mid, $cur, $new) = @_;
- my $ah = File::Temp->new(TEMPLATE => 'email-cur-XXXXXXXX', TMPDIR => 1);
+ my $ah = File::Temp->new(TEMPLATE => 'email-cur-XXXX', TMPDIR => 1);
print $ah $cur->as_string or die "print: $!";
$ah->flush or die "flush: $!";
PublicInbox::Import::drop_unwanted_headers($new);
- my $bh = File::Temp->new(TEMPLATE => 'email-new-XXXXXXXX', TMPDIR => 1);
+ my $bh = File::Temp->new(TEMPLATE => 'email-new-XXXX', TMPDIR => 1);
print $bh $new->as_string or die "print: $!";
$bh->flush or die "flush: $!";
my $cmd = [ qw(diff -u), $ah->filename, $bh->filename ];
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
}
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;
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;