From 279a47f3f64fc7a414247922b870e58a0b334b0f Mon Sep 17 00:00:00 2001 From: "Eric Wong (Contractor, The Linux Foundation)" Date: Sun, 9 Jun 2019 04:31:04 +0000 Subject: www: wire up /$INBOX/manifest.js.gz, too I can imagine myself just wanting to clone a single v2 inbox and all its epochs without thinking about include/exclude rules in a grokmirror config file. --- lib/PublicInbox/WWW.pm | 11 +++++++++++ t/www_listing.t | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm index 614adad6..a5466980 100644 --- a/lib/PublicInbox/WWW.pm +++ b/lib/PublicInbox/WWW.pm @@ -126,6 +126,8 @@ sub call { get_text($ctx, $1, $2); } elsif ($path_info =~ m!$INBOX_RE/([a-zA-Z0-9_\-\.]+)\.css\z!o) { get_css($ctx, $1, $2); + } elsif ($path_info =~ m!$INBOX_RE/manifest\.js\.gz\z!o) { + get_inbox_manifest($ctx, $1, $2); } elsif ($path_info =~ m!$INBOX_RE/($OID_RE)/s/\z!o) { get_vcs_object($ctx, $1, $2); } elsif ($path_info =~ m!$INBOX_RE/($OID_RE)/s/ @@ -490,6 +492,15 @@ sub www_listing { } } +# GET $INBOX/manifest.js.gz +sub get_inbox_manifest ($$$) { + my ($ctx, $inbox, $key) = @_; + my $r404 = invalid_inbox($ctx, $inbox); + return $r404 if $r404; + require PublicInbox::WwwListing; + PublicInbox::WwwListing::js($ctx->{env}, [$ctx->{-inbox}]); +} + sub get_attach { my ($ctx, $idx, $fn) = @_; require PublicInbox::WwwAttach; diff --git a/t/www_listing.t b/t/www_listing.t index f9d543e5..546c2f8f 100644 --- a/t/www_listing.t +++ b/t/www_listing.t @@ -133,6 +133,26 @@ mymanifest = $tmpdir/local-manifest.js.gz for (qw(alt bare v2/0 v2/1 v2/2)) { ok(-d "$tmpdir/mirror/$_", "grok-pull created $_"); } + + # support per-inbox manifests, handy for v2: + # /$INBOX/v2/manifest.js.gz + open $fh, '>', "$tmpdir/per-inbox.conf" or die; + print $fh <<"" or die; +# You can pull from multiple grok mirrors, just create +# a separate section for each mirror. The name can be anything. +[v2] +site = http://$host:$port +manifest = http://$host:$port/v2/manifest.js.gz +toplevel = $tmpdir/per-inbox +mymanifest = $tmpdir/per-inbox-manifest.js.gz + + close $fh or die; + ok(mkdir("$tmpdir/per-inbox"), 'prepare single-v2-inbox mirror'); + system(qw(grok-pull -c), "$tmpdir/per-inbox.conf"); + is($? >> 8, 127, 'grok-pull exit code as expected'); + for (qw(v2/0 v2/1 v2/2)) { + ok(-d "$tmpdir/per-inbox/$_", "grok-pull created $_"); + } } done_testing(); -- cgit v1.2.3-24-ge0c7