]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchIdx.pm
treewide: "require" + "use" cleanup and docs
[public-inbox.git] / lib / PublicInbox / SearchIdx.pm
index 62e836e0d2d936ed849eec108cca7852b554cb14..f14809d25fe361a827dc3f18a21e14a594594f2b 100644 (file)
@@ -12,7 +12,7 @@ use warnings;
 use base qw(PublicInbox::Search PublicInbox::Lock);
 use PublicInbox::MIME;
 use PublicInbox::InboxWritable;
-use PublicInbox::MID qw/mid_clean id_compress mid_mime mids_for_index/;
+use PublicInbox::MID qw/mid_clean mid_mime mids_for_index/;
 use PublicInbox::MsgIter;
 use Carp qw(croak);
 use POSIX qw(strftime);
@@ -144,14 +144,14 @@ sub term_generator ($) { # write-only
 }
 
 sub index_text ($$$$) {
-       my ($self, $field, $n, $text) = @_;
-       my $tg = term_generator($self);
+       my ($self, $text, $wdf_inc, $prefix) = @_;
+       my $tg = term_generator($self); # man Search::Xapian::TermGenerator
 
        if ($self->{indexlevel} eq 'full') {
-               $tg->index_text($field, $n, $text);
+               $tg->index_text($text, $wdf_inc, $prefix);
                $tg->increase_termpos;
        } else {
-               $tg->index_text_without_positions($field, $n, $text);
+               $tg->index_text_without_positions($text, $wdf_inc, $prefix);
        }
 }
 
@@ -199,12 +199,12 @@ sub index_old_diff_fn {
 }
 
 sub index_diff ($$$) {
-       my ($self, $lines, $doc) = @_;
+       my ($self, $txt, $doc) = @_;
        my %seen;
        my $in_diff;
        my @xnq;
        my $xnq = \@xnq;
-       foreach (@$lines) {
+       foreach (split(/\n/, $txt)) {
                if ($in_diff && s/^ //) { # diff context
                        index_diff_inc($self, $_, 'XDFCTX', $xnq);
                } elsif (/^-- $/) { # email signature begins
@@ -278,20 +278,17 @@ sub index_diff ($$$) {
 }
 
 sub index_body ($$$) {
-       my ($self, $lines, $doc) = @_;
-       my $txt = join("\n", @$lines);
+       my ($self, $txt, $doc) = @_;
        if ($doc) {
                # does it look like a diff?
                if ($txt =~ /^(?:diff|---|\+\+\+) /ms) {
-                       $txt = undef;
-                       index_diff($self, $lines, $doc);
+                       index_diff($self, $txt, $doc);
                } else {
                        index_text($self, $txt, 1, 'XNQ');
                }
        } else {
                index_text($self, $txt, 0, 'XQUOT');
        }
-       @$lines = ();
 }
 
 sub index_xapian { # msg_iter callback
@@ -306,19 +303,10 @@ sub index_xapian { # msg_iter callback
        my ($s, undef) = msg_part_text($part, $ct);
        defined $s or return;
 
-       my (@orig, @quot);
-       my @lines = split(/\n/, $s);
-       while (defined(my $l = shift @lines)) {
-               if ($l =~ /^>/) {
-                       index_body($self, \@orig, $doc) if @orig;
-                       push @quot, $l;
-               } else {
-                       index_body($self, \@quot, 0) if @quot;
-                       push @orig, $l;
-               }
-       }
-       index_body($self, \@quot, 0) if @quot;
-       index_body($self, \@orig, $doc) if @orig;
+       # split off quoted and unquoted blocks:
+       my @sections = split(/((?:^>[^\n]*\n)+)/sm, $s);
+       $part = $s = undef;
+       index_body($self, $_, /\A>/ ? 0 : $doc) for @sections;
 }
 
 sub add_xapian ($$$$$$) {
@@ -445,7 +433,7 @@ sub remove_message {
                batch_do($self, 'Q' . $mid, sub {
                        my ($ids) = @_;
                        $db->delete_document($_) for @$ids;
-                       $nr = scalar @$ids;
+                       $nr += scalar @$ids;
                });
        };
        if ($@) {