]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/SearchIdx.pm
smsg: to_doc_data: use existing fields
[public-inbox.git] / lib / PublicInbox / SearchIdx.pm
index 3a066c39ea91e9baa93e7f5504e4499e6b5332d6..c0578809231800b3fb77e01556ecb1c20bd4b672 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2019 all contributors <meta@public-inbox.org>
+# Copyright (C) 2015-2020 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 # based on notmuch, but with no concept of folders, files or flags
 #
@@ -19,6 +19,7 @@ use POSIX qw(strftime);
 use PublicInbox::OverIdx;
 use PublicInbox::Spawn qw(spawn);
 use PublicInbox::Git qw(git_unquote);
+use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
 my $X = \%PublicInbox::Search::X;
 my ($DB_CREATE_OR_OPEN, $DB_OPEN);
 use constant {
@@ -307,11 +308,14 @@ sub index_xapian { # msg_iter callback
 
 sub add_xapian ($$$$$$) {
        my ($self, $mime, $num, $oid, $mids, $mid0) = @_;
-       my $smsg = PublicInbox::SearchMsg->new($mime);
+       my $smsg = PublicInbox::Smsg->new($mime);
+       my $hdr = $mime->header_obj;
+       $smsg->{ds} = msg_datestamp($hdr, $self->{autime});
+       $smsg->{ts} = msg_timestamp($hdr, $self->{cotime});
        my $doc = $X->{Document}->new;
        my $subj = $smsg->subject;
-       add_val($doc, PublicInbox::Search::TS(), $smsg->ts);
-       my @ds = gmtime($smsg->ds);
+       add_val($doc, PublicInbox::Search::TS(), $smsg->{ts});
+       my @ds = gmtime($smsg->{ds});
        my $yyyymmdd = strftime('%Y%m%d', @ds);
        add_val($doc, PublicInbox::Search::YYYYMMDD(), $yyyymmdd);
        my $dt = strftime('%Y%m%d%H%M%S', @ds);
@@ -336,7 +340,9 @@ sub add_xapian ($$$$$$) {
        }
        $smsg->{to} = $smsg->{cc} = '';
        PublicInbox::OverIdx::parse_references($smsg, $mid0, $mids);
-       my $data = $smsg->to_doc_data($oid, $mid0);
+       $smsg->{blob} = $oid;
+       $smsg->{mid} = $mid0;
+       my $data = $smsg->to_doc_data;
        $doc->set_data($data);
        if (my $altid = $self->{-altid}) {
                foreach my $alt (@$altid) {
@@ -375,7 +381,8 @@ sub add_message {
                        add_xapian($self, $mime, $num, $oid, $mids, $mid0);
                }
                if (my $over = $self->{over}) {
-                       $over->add_overview($mime, $bytes, $num, $oid, $mid0);
+                       $over->add_overview($mime, $bytes, $num, $oid, $mid0,
+                                               $self);
                }
        };
 
@@ -460,7 +467,7 @@ sub remove_by_oid {
        for (; $head != $tail; $head++) {
                my $docid = $head->get_docid;
                my $doc = $db->get_document($docid);
-               my $smsg = PublicInbox::SearchMsg->wrap($mid);
+               my $smsg = PublicInbox::Smsg->wrap($mid);
                $smsg->load_expand($doc);
                if ($smsg->{blob} eq $oid) {
                        push(@delete, $docid);
@@ -596,6 +603,10 @@ sub read_log {
                } elsif ($line =~ /^commit ($h40)/o) {
                        $latest = $1;
                        $newest ||= $latest;
+               } elsif ($line =~ /^author .*? ([0-9]+) [\-\+][0-9]+$/) {
+                       $self->{over}->{autime} = $self->{autime} = $1;
+               } elsif ($line =~ /^committer .*? ([0-9]+) [\-\+][0-9]+$/) {
+                       $self->{over}->{cotime} = $self->{cotime} = $1;
                }
        }
        close($log) or die "git log failed: \$?=$?";
@@ -651,7 +662,7 @@ sub _git_log {
                $self->{regen_down} = $high + $fcount;
        }
 
-       $git->popen(qw/log --no-notes --no-color --no-renames
+       $git->popen(qw/log --pretty=raw --no-notes --no-color --no-renames
                                --raw -r --no-abbrev/, $range);
 }