about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchIdxShard.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-03-20 08:18:13 +0000
committerEric Wong <e@yhbt.net>2020-03-22 09:00:23 +0000
commit8e81d6f0d44198717ae540421a09824d75c9bb6d (patch)
tree754d15673307a90dcba5aa4cb088f7cbcd2ece49 /lib/PublicInbox/SearchIdxShard.pm
parentc29b2b7ded47def906cf00e3baad65c102304120 (diff)
downloadpublic-inbox-8e81d6f0d44198717ae540421a09824d75c9bb6d.tar.gz
When indexing messages without Date: and/or Received: headers,
fall back to using timestamps originally recorded by git in the
commit object.  This allows git mirrors to preserve the import
datestamp and timestamp of a message according to what was fed
into git, instead of blindly falling back to the current time.
Diffstat (limited to 'lib/PublicInbox/SearchIdxShard.pm')
-rw-r--r--lib/PublicInbox/SearchIdxShard.pm15
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm
index ee176e50..74c624a4 100644
--- a/lib/PublicInbox/SearchIdxShard.pm
+++ b/lib/PublicInbox/SearchIdxShard.pm
@@ -67,12 +67,15 @@ sub shard_worker_loop ($$$$$) {
                         $self->remove_by_oid($oid, $mid);
                 } else {
                         chomp $line;
-                        my ($len, $artnum, $oid, $mid0) = split(/ /, $line);
+                        my ($len, $artnum, $oid, $mid0, $autime, $cotime) =
+                                                        split(/ /, $line);
                         $self->begin_txn_lazy;
                         my $n = read($r, my $msg, $len) or die "read: $!\n";
                         $n == $len or die "short read: $n != $len\n";
                         my $mime = PublicInbox::MIME->new(\$msg);
                         $artnum = int($artnum);
+                        $self->{autime} = $autime;
+                        $self->{cotime} = $cotime;
                         $self->add_message($mime, $n, $artnum, $oid, $mid0);
                 }
         }
@@ -81,13 +84,17 @@ sub shard_worker_loop ($$$$$) {
 
 # called by V2Writable
 sub index_raw {
-        my ($self, $bytes, $msgref, $artnum, $oid, $mid0, $mime) = @_;
+        my ($self, $bytes, $msgref, $artnum, $oid, $mid0, $mime, $times) = @_;
+        my $at = $times->{autime} // time;
+        my $ct = $times->{cotime} // time;
         if (my $w = $self->{w}) {
-                print $w "$bytes $artnum $oid $mid0\n", $$msgref or die
-                        "failed to write shard $!\n";
+                print $w "$bytes $artnum $oid $mid0 $at $ct\n", $$msgref or
+                        die "failed to write shard $!\n";
         } else {
                 $$msgref = undef;
                 $self->begin_txn_lazy;
+                $self->{autime} = $at;
+                $self->{cotime} = $ct;
                 $self->add_message($mime, $bytes, $artnum, $oid, $mid0);
         }
 }