diff options
author | Eric Wong <e@80x24.org> | 2023-01-13 04:01:32 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-01-13 19:14:19 +0000 |
commit | 16f317f32bd5306d852b7d079b20cd0e4f2b4ff9 (patch) | |
tree | aa6ca9a35cd488eca5ba75d3fb59f4a51b1208d6 /lib/PublicInbox/RepoTree.pm | |
parent | d95ddf03cd437d6f5038f2ff21a9ef7efe93b056 (diff) | |
download | public-inbox-16f317f32bd5306d852b7d079b20cd0e4f2b4ff9.tar.gz |
We can't use 302 redirects at the /tree/ endpoint as originally intended since "#n$LINENO" fragment links aren't preserved across redirects (since clients don't typically send that part of the URL in requests). So we'll have to make sure we handle prefixes properly and show trees directly. Oh well :< At least the history-aware 404 handling remains :>
Diffstat (limited to 'lib/PublicInbox/RepoTree.pm')
-rw-r--r-- | lib/PublicInbox/RepoTree.pm | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/PublicInbox/RepoTree.pm b/lib/PublicInbox/RepoTree.pm index cec71eb6..84e20589 100644 --- a/lib/PublicInbox/RepoTree.pm +++ b/lib/PublicInbox/RepoTree.pm @@ -48,15 +48,20 @@ sub find_missing { $qsp->psgi_qx($ctx->{env}, undef, \&rd_404_log, $ctx); } -sub tree_30x { # git check_async callback +sub tree_show { # git check_async callback my ($oid, $type, $size, $ctx) = @_; return find_missing($ctx) if $type eq 'missing'; - my $wcb = delete $ctx->{-wcb}; - my $u = $ctx->{git}->base_url($ctx->{env}); - my $path = uri_escape_path(delete $ctx->{-path}); - $u .= "$oid/s/?b=$path"; - $wcb->([ 302, [ Location => $u, 'Content-Type' => 'text/plain' ], - [ "Redirecting to $u\n" ] ]) + + open $ctx->{lh}, '<', \(my $dbg_log = '') or die "open(scalar): $!"; + my $res = [ $ctx->{git}, $oid, $type, $size ]; + my ($bn) = ($ctx->{-path} =~ m!/?([^/]+)\z!); + if ($type eq 'blob') { + my $obj = ascii_html($ctx->{-obj}); + $ctx->{-paths} = [ $bn, qq[(<a +href="$ctx->{-upfx}$oid/s/$bn">raw</a>) +\$ git show $obj\t# shows this blob on the CLI] ]; + } + PublicInbox::ViewVCS::solve_result($res, $ctx); } sub srv_tree { @@ -74,9 +79,9 @@ sub srv_tree { sub { $ctx->{-wcb} = $_[0]; # HTTP::{Chunked,Identity} if ($ctx->{env}->{'pi-httpd.async'}) { - async_check($ctx, $obj, \&tree_30x, $ctx); + async_check($ctx, $obj, \&tree_show, $ctx); } else { - $ctx->{git}->check_async($obj, \&tree_30x, $ctx); + $ctx->{git}->check_async($obj, \&tree_show, $ctx); $ctx->{git}->async_wait_all; } }; |