about summary refs log tree commit homepage
path: root/lib/PublicInbox/Repobrowse.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-01-15 03:00:13 +0000
committerEric Wong <e@80x24.org>2016-04-05 18:58:27 +0000
commitb01b50858cac10ff8cd9722fd5be9bcaf314b83c (patch)
treea92b104a88f3a20aec7923c215720b1c6532b384 /lib/PublicInbox/Repobrowse.pm
parentdd3ff54154f7a771da07c10f500e3033c8ce71bc (diff)
downloadpublic-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.pm46
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') }