diff options
author | Eric Wong <e@80x24.org> | 2016-01-15 03:00:13 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-04-05 18:58:27 +0000 |
commit | b01b50858cac10ff8cd9722fd5be9bcaf314b83c (patch) | |
tree | a92b104a88f3a20aec7923c215720b1c6532b384 /lib/PublicInbox/Repobrowse.pm | |
parent | dd3ff54154f7a771da07c10f500e3033c8ce71bc (diff) | |
download | public-inbox-b01b50858cac10ff8cd9722fd5be9bcaf314b83c.tar.gz |
This should provide a decent landing page for projects. Alternative README files may be configured with the per-repo "readme" directive.
Diffstat (limited to 'lib/PublicInbox/Repobrowse.pm')
-rw-r--r-- | lib/PublicInbox/Repobrowse.pm | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/lib/PublicInbox/Repobrowse.pm b/lib/PublicInbox/Repobrowse.pm index 75dee72f..9e97593b 100644 --- a/lib/PublicInbox/Repobrowse.pm +++ b/lib/PublicInbox/Repobrowse.pm @@ -63,33 +63,41 @@ sub run { }; my $cmd = shift @extra; + my $vcs_lc = $repo_info->{vcs}; + my $vcs = $VCS{$vcs_lc} or return r404(); + my $mod; if (defined $cmd && length $cmd) { - my $vcs_lc = $repo_info->{vcs}; - my $vcs = $VCS{$vcs_lc} or return r404(); - my $mod = $CMD{$cmd}; + $mod = $CMD{$cmd}; unless ($mod) { unshift @extra, $cmd; $mod = 'Fallback'; } - $mod = load_once("PublicInbox::Repobrowse$vcs$mod"); - $vcs = load_once("PublicInbox::$vcs"); - $repo_info->{$vcs_lc} ||= $vcs->new($repo_info->{path}); $req->{relcmd} = '../' x scalar(@extra); - while (@extra && $extra[-1] eq '') { - pop @extra; - ++$req->{tslash}; - } - $req->{expath} = join('/', @extra); - my $rv = eval { $mod->new->call($cmd, $req) }; - $rv || r404(); } else { - $req->{relcmd} = defined $cmd ? '' : './'; - summary($req); + $mod = 'Summary'; + $cmd = 'summary'; + if ($path_info =~ m!/\z!) { + $req->{tslash} = $path_info =~ tr!/!!; + $req->{relcmd} = ''; + } else { + my @repo = split('/', $repo_path); + if (@repo > 1) { + $req->{relcmd} = "./$repo[-1]/"; + } else { + $req->{relcmd} = "/$repo[-1]/"; + } + } } -} - -sub summary { - r404(); + $mod = load_once("PublicInbox::Repobrowse$vcs$mod"); + $vcs = load_once("PublicInbox::$vcs"); + $repo_info->{$vcs_lc} ||= $vcs->new($repo_info->{path}); + while (@extra && $extra[-1] eq '') { + pop @extra; + ++$req->{tslash}; + } + $req->{expath} = join('/', @extra); + my $rv = eval { $mod->new->call($cmd, $req) }; # RepobrowseBase::call + $rv || r404(); } sub r404 { r(404, 'Not Found') } |