about summary refs log tree commit homepage
path: root/lib/PublicInbox/WWW.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-03-21 02:03:54 +0000
committerEric Wong <e@yhbt.net>2020-03-25 01:48:35 +0000
commit6512b1245ebc6fe30bb32227c0ef8f912d4988ab (patch)
tree99e4b6ecbd1d8a381d0253c1aafdae8811570e23 /lib/PublicInbox/WWW.pm
parent7909c5f7439777e3b3643f14224b27f0a8f8fb07 (diff)
downloadpublic-inbox-6512b1245ebc6fe30bb32227c0ef8f912d4988ab.tar.gz
This ensures all our indexed data, including data from altid
searches (e.g. "gmane:$ARTNUM") is retrievable.

It uses a "POST" request to avoid wasting cycles when invoked by
crawlers, since it could potentially be several megabytes of
data not indexable by search engines.
Diffstat (limited to 'lib/PublicInbox/WWW.pm')
-rw-r--r--lib/PublicInbox/WWW.pm14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index 2434f2f5..5017f572 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -65,6 +65,8 @@ sub call {
                         my ($epoch, $path) = ($2, $3);
                         return invalid_inbox($ctx, $1) ||
                                 serve_git($ctx, $epoch, $path);
+                } elsif ($path_info =~ m!$INBOX_RE/(\w+)\.sql\.gz\z!o) {
+                        return get_altid_dump($ctx, $1, $2);
                 } elsif ($path_info =~ m!$INBOX_RE/!o) {
                         return invalid_inbox($ctx, $1) || mbox_results($ctx);
                 }
@@ -150,8 +152,8 @@ sub preload {
                 require PublicInbox::Search;
                 PublicInbox::Search::load_xapian();
         };
-        foreach (qw(PublicInbox::SearchView PublicInbox::MboxGz)) {
-                eval "require $_;";
+        for (qw(SearchView MboxGz WwwAltId)) {
+                eval "require PublicInbox::$_;";
         }
         if (ref($self)) {
                 my $pi_config = $self->{pi_config};
@@ -301,6 +303,14 @@ sub get_vcs_object ($$$;$) {
         PublicInbox::ViewVCS::show($ctx, $oid, $filename);
 }
 
+sub get_altid_dump {
+        my ($ctx, $inbox, $altid_pfx) =@_;
+        my $r404 = invalid_inbox($ctx, $inbox);
+        return $r404 if $r404;
+        eval { require PublicInbox::WwwAltId } or return need($ctx, 'sqlite3');
+        PublicInbox::WwwAltId::sqldump($ctx, $altid_pfx);
+}
+
 sub need {
         my ($ctx, $extra) = @_;
         my $msg = <<EOF;