diff options
author | Eric Wong <e@80x24.org> | 2017-03-03 22:07:19 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2017-03-03 22:12:19 +0000 |
commit | b2492cc6ef642640c901ccca5ff96b9228cd10ec (patch) | |
tree | 4b9d730886d9a638388cf43ab1b8a7ff74bb4c33 | |
parent | 3fb3433282f2c805878d5e6f02e2b04534cd5906 (diff) | |
download | public-inbox-b2492cc6ef642640c901ccca5ff96b9228cd10ec.tar.gz |
Implying a tip would make for ambiguous URLs and ruin caching, so try to get everybody to hit the same URL. This also simplifies some of our other code since the tip is always in the request.
-rw-r--r-- | lib/PublicInbox/RepoBase.pm | 4 | ||||
-rw-r--r-- | lib/PublicInbox/RepoGitSrc.pm | 10 | ||||
-rw-r--r-- | t/repobrowse_git_src.t | 5 |
3 files changed, 11 insertions, 8 deletions
diff --git a/lib/PublicInbox/RepoBase.pm b/lib/PublicInbox/RepoBase.pm index e600b1df..5d38579c 100644 --- a/lib/PublicInbox/RepoBase.pm +++ b/lib/PublicInbox/RepoBase.pm @@ -86,7 +86,7 @@ sub r { my $env = $req->{env}; my $base = PublicInbox::Repobrowse::base_url($env); my ($redir) = @extra; - if ($redir =~ m!\A\.\./!) { # relative redirect + if (index($redir, '/') != 0) { # relative redirect my @orig = split(m!/+!, $env->{PATH_INFO}); my @dest = split(m!/+!, $redir); @@ -98,7 +98,7 @@ sub r { $end = pop @dest if $dest[-1] =~ /\A[#\?]/; $redir = $base . join('/', @orig, @dest) . $end; } else { - $redir = $base . '/' . $redir; + $redir = $base . $redir; } push @h, qw(Content-Type text/plain Location), $redir; diff --git a/lib/PublicInbox/RepoGitSrc.pm b/lib/PublicInbox/RepoGitSrc.pm index de068940..38108442 100644 --- a/lib/PublicInbox/RepoGitSrc.pm +++ b/lib/PublicInbox/RepoGitSrc.pm @@ -23,7 +23,7 @@ sub call_git_src { my ($self, $req) = @_; my $repo = $req->{-repo}; my $git = $repo->{git}; - my $tip = $req->{tip} || $req->{repo}->tip; + my $tip = $req->{tip} or return $self->r(302, $req, $repo->tip); sub { my ($res) = @_; $git->check_async($req->{env}, "$tip:$req->{expath}", sub { @@ -57,7 +57,7 @@ sub cur_path { my ($req) = @_; my @ex = @{$req->{extra}} or return '<b>root</b>'; my $s; - my $tip = $req->{tip} || $req->{repo}->tip; + my $tip = $req->{tip}; my $rel = $req->{relcmd}; # avoid relative paths, here, we don't want to propagate # trailing-slash URLs although we tolerate them @@ -81,7 +81,7 @@ sub git_blob_sed ($$$) { my @lines; my $buf = ''; my $rel = $req->{relcmd}; - my $tip = $req->{tip} || $req->{repo}->tip; + my $tip = $req->{tip}; my $raw = join('/', "${rel}raw", $tip, @{$req->{extra}}); $raw = PublicInbox::Hval->utf8($raw)->as_path; my $t = cur_path($req); @@ -220,10 +220,8 @@ sub git_tree_show { $req->{thtml} .= "\npath: $t\n\n<b>mode\tsize\tname</b>\n"; if (defined(my $last = $req->{extra}->[-1])) { $pfx = PublicInbox::Hval->utf8($last)->as_path; - } elsif (defined(my $tip = $req->{tip})) { - $pfx = $tip; } else { - $pfx = 'src/' . $req->{-repo}->tip; + $pfx = 'src/' . $req->{tip}; } $req->{tpfx} = $pfx; my $env = $req->{env}; diff --git a/t/repobrowse_git_src.t b/t/repobrowse_git_src.t index 4d16eac4..aa341d38 100644 --- a/t/repobrowse_git_src.t +++ b/t/repobrowse_git_src.t @@ -14,6 +14,11 @@ test_psgi($test->{app}, sub { like($noslash_body, qr{href="dir/dur">dur/</a>}, 'path ok w/o slash'); + $req = 'http://example.com/test.git/src'; + $res = $cb->(GET($req)); + is(302, $res->code, 'got 302 response from dir'); + is("$req/master", $res->header('Location'), 'redirected to tip'); + my $slash = $req . '/'; my $r2 = $cb->(GET($slash)); is(301, $r2->code, 'got 301 response from dir with slash'); |