]> Sergey Matveev's repositories - public-inbox.git/commitdiff
config: fix NewsWWW fallback for newsgroups in HTTP URLs
authorEric Wong <e@80x24.org>
Fri, 27 May 2016 08:57:42 +0000 (08:57 +0000)
committerEric Wong <e@80x24.org>
Fri, 27 May 2016 09:03:32 +0000 (09:03 +0000)
Oops, added a test to prevent regressions while we're at it.

lib/PublicInbox/Config.pm
lib/PublicInbox/NewsWWW.pm
t/plack.t

index 935b04450b3c4f2cbdb32348355894e9fcb8be82..35b24af4567eeb83ae1458b06eb078278970c89c 100644 (file)
@@ -56,7 +56,8 @@ sub lookup_name {
        my ($self, $name) = @_;
        my $rv = $self->{-by_name}->{$name};
        return $rv if $rv;
-       $self->{-by_name}->{$name} = _fill($self, "publicinbox.$name");
+       $rv = _fill($self, "publicinbox.$name") or return;
+       $self->{-by_name}->{$name} = $rv;
 }
 
 sub get {
@@ -118,6 +119,7 @@ sub _fill {
                my $v = $self->{"$pfx.$k"};
                $rv->{$k} = $v if defined $v;
        }
+       return unless $rv->{mainrepo};
        my $inbox = $pfx;
        $inbox =~ s/\Apublicinbox\.//;
        $rv->{name} = $inbox;
index 19eb596cea2a1563489ae2d6107a8e3643248cec..5357059dee21733a4d9f537f591fd0376ea5fda8 100644 (file)
@@ -30,7 +30,6 @@ sub call {
        if (my $info = $ng_map->{$ng}) {
                my $url = PublicInbox::Hval::prurl($env, $info->{url});
                my $code = 301;
-               my $h = [ Location => $url, 'Content-Type' => 'text/plain' ];
                if (defined $article && $article =~ /\A\d+\z/) {
                        my $mid = eval { ng_mid_for($ng, $info, $article) };
                        if (defined $mid) {
@@ -41,6 +40,8 @@ sub call {
                        }
                }
 
+               my $h = [ Location => $url, 'Content-Type' => 'text/plain' ];
+
                return [ $code, $h, [ "Redirecting to $url\n" ] ]
        }
        [ 404, [ 'Content-Type' => 'text/plain' ], [] ];
index c8dd7bfe818b60e86c58eaf4a05debded8b060de..04680b2a61b5e6301e89a3c20b9ee93dafd435d3 100644 (file)
--- a/t/plack.t
+++ b/t/plack.t
@@ -30,6 +30,8 @@ foreach my $mod (@mods) { use_ok $mod; }
        my %cfg = (
                "$cfgpfx.address" => $addr,
                "$cfgpfx.mainrepo" => $maindir,
+               "$cfgpfx.url" => 'http://example.com/test/',
+               "$cfgpfx.newsgroup" => 'inbox.test',
        );
        while (my ($k,$v) = each %cfg) {
                is(0, system(qw(git config --file), $pi_config, $k, $v),
@@ -60,6 +62,19 @@ EOF
                require $psgi;
        };
 
+       # redirect with newsgroup
+       test_psgi($app, sub {
+               my ($cb) = @_;
+               my $from = 'http://example.com/inbox.test';
+               my $to = 'http://example.com/test/';
+               my $res = $cb->(GET($from));
+               is($res->code, 301, 'is permanent redirect');
+               is($to, $res->header('Location'), 'redirect location matches');
+               $from .= '/';
+               is($res->code, 301, 'is permanent redirect');
+               is($to, $res->header('Location'), 'redirect location matches');
+       });
+
        # redirect with trailing /
        test_psgi($app, sub {
                my ($cb) = @_;