$self->{lock_path} = "$inboxdir/ssoma.lock";
my $dir = $self->xdir;
$self->{over} = PublicInbox::OverIdx->new("$dir/over.sqlite3");
+ $self->{index_max_size} = $ibx->{index_max_size};
} elsif ($version == 2) {
defined $shard or die "shard is required for v2\n";
# shard is a number
}
sub index_xapian { # msg_iter callback
- my $part = $_[0]->[0]; # ignore $depth and @idx
+ my $part = $_[0]->[0]; # ignore $depth and $idx
my ($self, $doc) = @{$_[1]};
my $ct = $part->content_type || 'text/plain';
my $fn = $part->filename;
}
}
$doc->add_boolean_term('Q' . $_) foreach @$mids;
+ for my $l ($hdr->header_raw('List-Id')) {
+ $l =~ /<([^>]+)>/ or next;
+ my $lid = $1;
+ $doc->add_boolean_term('G' . $lid);
+ index_text($self, $lid, 1, 'XL'); # probabilistic
+ }
$self->{xdb}->replace_document($smsg->{num}, $doc);
}
my ($git, $blob, $sizeref) = @_;
my $str = $git->cat_file($blob, $sizeref) or
die "BUG: $blob not found in $git->{git_dir}";
- # fixup bugs from import:
- $$str =~ s/\A[\r\n]*From [^\r\n]*\r?\n//s;
PublicInbox::MIME->new($str);
}
}
}
+sub too_big ($$$) {
+ my ($self, $git, $oid) = @_;
+ my $max_size = $self->{index_max_size} or return;
+ my (undef, undef, $size) = $git->check($oid);
+ die "E: bad $oid in $git->{git_dir}\n" if !defined($size);
+ return if $size <= $max_size;
+ warn "W: skipping $oid ($size > $max_size)\n";
+ 1;
+}
+
# only for v1
sub read_log {
my ($self, $log, $add_cb, $del_cb, $batch_cb) = @_;
}
next;
}
+ next if too_big($self, $git, $blob);
my $mime = do_cat_mail($git, $blob, \$bytes);
my $smsg = bless {}, 'PublicInbox::Smsg';
batch_adjust(\$max, $bytes, $batch_cb, $latest, ++$nr);
$add_cb->($self, $mime, $smsg);
} elsif ($line =~ /$delmsg/o) {
my $blob = $1;
- $D{$blob} = 1;
+ $D{$blob} = 1 unless too_big($self, $git, $blob);
} elsif ($line =~ /^commit ($h40)/o) {
$latest = $1;
$newest ||= $latest;