From 8e52e5fdea416d6fda0b8d301144af0c043a5a76 Mon Sep 17 00:00:00 2001 From: "Eric Wong (Contractor, The Linux Foundation)" Date: Wed, 21 Mar 2018 01:52:58 +0000 Subject: use both Date: and Received: times We want to rely on Date: to sort messages within individual threads since it keeps messages from git-send-email(1) sorted. However, since developers occasionally have the clock set wrong on their machines, sort overall messages by the newest date in a Received: header so the landing page isn't forever polluted by messages from the future. This also gives us determinism for commit times in most cases, as we'll used the Received: timestamp there, as well. --- lib/PublicInbox/Import.pm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'lib/PublicInbox/Import.pm') diff --git a/lib/PublicInbox/Import.pm b/lib/PublicInbox/Import.pm index e50f1156..d69934b0 100644 --- a/lib/PublicInbox/Import.pm +++ b/lib/PublicInbox/Import.pm @@ -11,7 +11,7 @@ use base qw(PublicInbox::Lock); use PublicInbox::Spawn qw(spawn); use PublicInbox::MID qw(mids mid_mime mid2path); use PublicInbox::Address; -use PublicInbox::MsgTime qw(msg_timestamp); +use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp); use PublicInbox::ContentId qw(content_digest); use PublicInbox::MDA; @@ -244,9 +244,8 @@ sub remove { (($self->{tip} = ":$commit"), $cur); } -sub parse_date ($) { - my ($mime) = @_; - my ($ts, $zone) = msg_timestamp($mime->header_obj); +sub git_timestamp { + my ($ts, $zone) = @_; $ts = 0 if $ts < 0; # git uses unsigned times "$ts $zone"; } @@ -295,7 +294,11 @@ sub add { my ($self, $mime, $check_cb) = @_; # mime = Email::MIME my ($name, $email) = extract_author_info($mime); - my $date_raw = parse_date($mime); + my $hdr = $mime->header_obj; + my @at = msg_datestamp($hdr); + my @ct = msg_timestamp($hdr); + my $author_time_raw = git_timestamp(@at); + my $commit_time_raw = git_timestamp(@ct); my $subject = $mime->header('Subject'); $subject = '(no subject)' unless defined $subject; my $path_type = $self->{path_type}; @@ -349,8 +352,8 @@ sub add { utf8::encode($subject); print $w "commit $ref\nmark :$commit\n", - "author $name <$email> $date_raw\n", - "committer $self->{ident} ", now_raw(), "\n" or wfail; + "author $name <$email> $author_time_raw\n", + "committer $self->{ident} $commit_time_raw\n" or wfail; print $w "data ", (length($subject) + 1), "\n", $subject, "\n\n" or wfail; if ($tip ne '') { -- cgit v1.2.3-24-ge0c7