about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2017-03-03 22:07:19 +0000
committerEric Wong <e@80x24.org>2017-03-03 22:12:19 +0000
commitb2492cc6ef642640c901ccca5ff96b9228cd10ec (patch)
tree4b9d730886d9a638388cf43ab1b8a7ff74bb4c33 /lib/PublicInbox
parent3fb3433282f2c805878d5e6f02e2b04534cd5906 (diff)
downloadpublic-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.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/RepoBase.pm4
-rw-r--r--lib/PublicInbox/RepoGitSrc.pm10
2 files changed, 6 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};