- } elsif ($path_info =~ m!$LISTNAME_RE\z!o) {
- invalid_list(\%ctx, $1) || r301(\%ctx, $1);
- } elsif ($path_info =~ m!$LISTNAME_RE(?:/|/index\.html)?\z!o) {
- invalid_list(\%ctx, $1) || get_index(\%ctx);
- } elsif ($path_info =~ m!$LISTNAME_RE/(?:atom\.xml|new\.atom)\z!o) {
- invalid_list(\%ctx, $1) || get_atom(\%ctx);
-
- # thread display
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/t/\z!o) {
- invalid_list_mid(\%ctx, $1, $2) || get_thread(\%ctx);
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/t\.mbox(\.gz)?\z!o) {
- my $sfx = $3;
- invalid_list_mid(\%ctx, $1, $2) || get_thread_mbox(\%ctx, $sfx);
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/t\.atom\z!o) {
- invalid_list_mid(\%ctx, $1, $2) || get_thread_atom(\%ctx);
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/T/\z!o) {
- $ctx{flat} = 1;
- invalid_list_mid(\%ctx, $1, $2) || get_thread(\%ctx);
-
- # single-message pages
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/\z!o) {
- invalid_list_mid(\%ctx, $1, $2) || get_mid_html(\%ctx);
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/raw\z!o) {
- invalid_list_mid(\%ctx, $1, $2) || get_mid_txt(\%ctx);
-
- # full-message page
- } elsif ($path_info =~ m!$LISTNAME_RE/$MID_RE/f/\z!o) {
- invalid_list_mid(\%ctx, $1, $2) || get_full_html(\%ctx);
+ } elsif ($path_info =~ m!$INBOX_RE\z!o) {
+ invalid_inbox($self, $ctx, $1) || r301($ctx, $1);
+ } elsif ($path_info =~ m!$INBOX_RE(?:/|/index\.html)?\z!o) {
+ invalid_inbox($self, $ctx, $1) || get_index($ctx);
+ } elsif ($path_info =~ m!$INBOX_RE/(?:atom\.xml|new\.atom)\z!o) {
+ invalid_inbox($self, $ctx, $1) || get_atom($ctx);
+
+ } elsif ($path_info =~ m!$INBOX_RE/
+ ($PublicInbox::GitHTTPBackend::ANY)\z!ox) {
+ my $path = $2;
+ invalid_inbox($self, $ctx, $1) ||
+ serve_git($env, $ctx->{git}, $path);
+ } elsif ($path_info =~ m!$INBOX_RE/([\w-]+).mbox\.gz\z!o) {
+ serve_mbox_range($self, $ctx, $1, $2);
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/$END_RE\z!o) {
+ msg_page($self, $ctx, $1, $2, $3);
+
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/$ATTACH_RE\z!o) {
+ my ($idx, $fn) = ($3, $4);
+ invalid_inbox_mid($self, $ctx, $1, $2) ||
+ get_attach($ctx, $idx, $fn);
+ # in case people leave off the trailing slash:
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/(T|t)\z!o) {
+ my ($inbox, $mid, $suffix) = ($1, $2, $3);
+ $suffix .= $suffix =~ /\A[tT]\z/ ? '/#u' : '/';
+ r301($ctx, $inbox, $mid, $suffix);
+
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/R/?\z!o) {
+ my ($inbox, $mid) = ($1, $2);
+ r301($ctx, $inbox, $mid, '#R');
+
+ } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/f/?\z!o) {
+ r301($ctx, $1, $2);