Provide a fallback for legacy SHA-1 messages, but do not
advertise shorter URLs anymore for data portability concerns.
This fixes a regression introduced in
commit
81a9c1b476987d845b340ab9013d26cf4487cb9a
("search: disable Message-ID compression in Xapian")
which ended up breaking thread-related endpoints for
large Message-IDs, as lookups on the SHA-1 message no longer
worked.
use warnings;
use URI::Escape qw(uri_escape_utf8);
use PublicInbox::Hval;
-use PublicInbox::MID qw/mid_compress mid2path/;
+use PublicInbox::MID qw/mid2path/;
# TODO: user-configurable
our @EXT_URL = (
use PublicInbox::Hval;
use PublicInbox::GitCatFile;
use PublicInbox::View;
-use PublicInbox::MID qw/mid_clean mid_compress mid2path/;
+use PublicInbox::MID qw/mid_clean mid2path/;
use POSIX qw/strftime/;
use constant {
DATEFMT => '%Y-%m-%dT%H:%M:%SZ', # atom standard
my $mime = do_cat_mail($git, $path) or return 0;
$header_obj = $mime->header_obj;
}
- my $mid = $header_obj->header('Message-ID');
- $mid = mid_compress(mid_clean($mid));
+ my $mid = mid_clean($header_obj->header('Message-ID'));
$u = $enc_utf8->decode($u);
push @$order, [ $mid, $ts, $u, $subj, $topic ];
return 1;
use fields qw(raw href);
use Encode qw(find_encoding);
use URI::Escape qw(uri_escape_utf8);
-use PublicInbox::MID qw/mid_clean mid_compress/;
+use PublicInbox::MID qw/mid_clean/;
my $enc_ascii = find_encoding('us-ascii');
sub new_msgid {
my ($class, $msgid, $no_compress) = @_;
$msgid = mid_clean($msgid);
- $class->new($msgid, $no_compress ? $msgid : mid_compress($msgid));
+ $class->new($msgid, $msgid);
}
sub new_oneline {
package PublicInbox::Mbox;
use strict;
use warnings;
-use PublicInbox::MID qw/mid_compress mid2path/;
+use PublicInbox::MID qw/mid2path/;
require Email::Simple;
sub thread_mbox {
$fh = PublicInbox::MboxGz->new($fh) if $sfx;
require PublicInbox::GitCatFile;
- my $mid = mid_compress($ctx->{mid});
+ my $mid = $ctx->{mid};
my $git = PublicInbox::GitCatFile->new($ctx->{git_dir});
my %opts = (offset => 0);
my $nr;
sub emit_thread_html {
my ($cb, $ctx, $foot, $srch) = @_;
- my $mid = mid_compress($ctx->{mid});
+ my $mid = $ctx->{mid};
my $res = $srch->get_thread($mid);
my $msgs = load_results($res);
my $nr = scalar @$msgs;
sub thread_inline {
my ($dst, $ctx, $cur, $full_pfx) = @_;
my $srch = $ctx->{srch};
- my $mid = mid_compress(mid_clean($cur->header('Message-ID')));
+ my $mid = mid_clean($cur->header('Message-ID'));
my $res = $srch->get_thread($mid);
my $nr = $res->{total};
seen => { $subj => 1 },
srch => $srch,
cur => $mid,
- parent_cmp => $parent ? mid_compress($parent) : '',
+ parent_cmp => defined $parent ? $parent : '',
parent => $parent,
};
for (thread_results(load_results($res))->rootset) {
my $pfx = INDENT x $level;
my $cur = $state->{cur};
- my $mid = $mime->header('Message-ID');
+ my $mid = mid_clean($mime->header('Message-ID'));
my $f = $mime->header('X-PI-From');
my $d = _msg_date($mime);
$f = PublicInbox::Hval->new($f);
$d = PublicInbox::Hval->new($d);
$f = $f->as_html;
$d = $d->as_html . ' UTC';
- my $midc = mid_compress(mid_clean($mid));
if ($cur) {
- if ($cur eq $midc) {
+ if ($cur eq $mid) {
delete $state->{cur};
$$dst .= "$pfx` <b><a\nid=\"r\"\nhref=\"#t\">".
"[this message]</a></b> by $f @ $d\n";
return;
}
} else {
- $state->{next_msg} ||= $midc;
+ $state->{next_msg} ||= $mid;
}
# Subject is never undef, this mail was loaded from
sub invalid_list_mid {
my ($ctx, $listname, $mid) = @_;
my $ret = invalid_list($ctx, $listname, $mid);
- $ctx->{mid} = uri_unescape($mid) unless $ret;
- $ret;
+ return $ret if $ret;
+
+ $ctx->{mid} = $mid = uri_unescape($mid);
+ if ($mid =~ /\A[a-f0-9]{40}\z/) {
+ if ($mid = mid2blob($ctx)) {
+ require Email::Simple;
+ use PublicInbox::MID qw/mid_clean/;
+ $mid = Email::Simple->new($mid);
+ $ctx->{mid} = mid_clean($mid->header('Message-ID'));
+ }
+ }
+ undef;
}
# /$LISTNAME/new.atom -> Atom feed, includes replies