]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchIdx.pm
use raw header for Message-ID
[public-inbox.git] / lib / PublicInbox / SearchIdx.pm
index 67272997b22149faf3db8b9018a86ac8569f83ae..63be68101b40c8ae7f4f8d8e39ee94492594a589 100644 (file)
@@ -10,7 +10,7 @@ package PublicInbox::SearchIdx;
 use strict;
 use warnings;
 use base qw(PublicInbox::Search);
-use PublicInbox::MID qw/mid_clean id_compress/;
+use PublicInbox::MID qw/mid_clean id_compress mid_mime/;
 require PublicInbox::Git;
 *xpfx = *PublicInbox::Search::xpfx;
 
@@ -54,7 +54,7 @@ sub add_message {
        my $db = $self->{xdb};
 
        my $doc_id;
-       my $mid = mid_clean($mime->header('Message-ID'));
+       my $mid = mid_clean(mid_mime($mime));
        my $was_ghost = 0;
        my $ct_msg = $mime->header('Content-Type') || 'text/plain';
 
@@ -222,9 +222,10 @@ sub link_message_to_parents {
        my $doc = $smsg->{doc};
        my $mid = $smsg->mid;
        my $mime = $smsg->mime;
-       my $refs = $mime->header('References');
+       my $hdr = $mime->header_obj;
+       my $refs = $hdr->header_raw('References');
        my @refs = $refs ? ($refs =~ /<([^>]+)>/g) : ();
-       if (my $irt = $mime->header('In-Reply-To')) {
+       if (my $irt = $hdr->header_raw('In-Reply-To')) {
                # last References should be $irt
                # we will de-dupe later
                push @refs, mid_clean($irt);
@@ -274,29 +275,29 @@ sub index_blob {
 
 sub unindex_blob {
        my ($self, $git, $mime) = @_;
-       my $mid = mid_clean($mime->header('Message-ID'));
+       my $mid = eval { mid_clean(mid_mime($mime)) };
        $self->remove_message($mid) if defined $mid;
 }
 
 sub index_mm {
        my ($self, $git, $mime) = @_;
-       $self->{mm}->mid_insert(mid_clean($mime->header('Message-ID')));
+       $self->{mm}->mid_insert(mid_clean(mid_mime($mime)));
 }
 
 sub unindex_mm {
        my ($self, $git, $mime) = @_;
-       $self->{mm}->mid_delete(mid_clean($mime->header('Message-ID')));
+       $self->{mm}->mid_delete(mid_clean(mid_mime($mime)));
 }
 
 sub index_mm2 {
        my ($self, $git, $mime, $bytes) = @_;
-       my $num = $self->{mm}->num_for(mid_clean($mime->header('Message-ID')));
+       my $num = $self->{mm}->num_for(mid_clean(mid_mime($mime)));
        index_blob($self, $git, $mime, $bytes, $num);
 }
 
 sub unindex_mm2 {
        my ($self, $git, $mime) = @_;
-       $self->{mm}->mid_delete(mid_clean($mime->header('Message-ID')));
+       $self->{mm}->mid_delete(mid_clean(mid_mime($mime)));
        unindex_blob($self, $git, $mime);
 }
 
@@ -337,7 +338,7 @@ sub rlog {
                                --raw -r --no-abbrev/, $range);
        my $latest;
        my $bytes;
-       while (my $line = <$log>) {
+       while (defined(my $line = <$log>)) {
                if ($line =~ /$addmsg/o) {
                        my $mime = do_cat_mail($git, $1, \$bytes) or next;
                        $add_cb->($self, $git, $mime, $bytes);
@@ -348,7 +349,6 @@ sub rlog {
                        $latest = $1;
                }
        }
-       close $log;
        $latest;
 }
 
@@ -446,7 +446,6 @@ sub _read_git_config_perm {
        my @cmd = qw(config core.sharedRepository);
        my $fh = PublicInbox::Git->new($self->{git_dir})->popen(@cmd);
        my $perm = <$fh>;
-       close $fh;
        chomp $perm if defined $perm;
        $perm;
 }