my $method = $env->{REQUEST_METHOD};
if ($method eq 'POST') {
- if ($path_info =~ m!$INBOX_RE/(git-upload-pack)\z!) {
- my $path = $2;
+ if ($path_info =~ m!$INBOX_RE/(?:(\d+)/)?(git-upload-pack)\z!) {
+ my ($part, $path) = ($2, $3);
return invalid_inbox($ctx, $1) ||
- serve_git($ctx, $path);
+ serve_git($ctx, $part, $path);
} elsif ($path_info =~ m!$INBOX_RE/!o) {
return invalid_inbox($ctx, $1) || mbox_results($ctx);
}
invalid_inbox($ctx, $1) || get_atom($ctx);
} elsif ($path_info =~ m!$INBOX_RE/new\.html\z!o) {
invalid_inbox($ctx, $1) || get_new($ctx);
- } elsif ($path_info =~ m!$INBOX_RE/
+ } elsif ($path_info =~ m!$INBOX_RE/(?:(\d+)/)?
($PublicInbox::GitHTTPBackend::ANY)\z!ox) {
- my $path = $2;
- invalid_inbox($ctx, $1) || serve_git($ctx, $path);
+ my ($part, $path) = ($2, $3);
+ invalid_inbox($ctx, $1) || serve_git($ctx, $part, $path);
} elsif ($path_info =~ m!$INBOX_RE/([\w-]+).mbox\.gz\z!o) {
serve_mbox_range($ctx, $1, $2);
} elsif ($path_info =~ m!$INBOX_RE/$MID_RE/$END_RE\z!o) {
if (defined $obj) {
$ctx->{git} = $obj->git;
$ctx->{-inbox} = $obj;
- $ctx->{inbox} = $inbox;
return;
}
# /$INBOX/$MESSAGE_ID/raw -> raw mbox
sub get_mid_txt {
my ($ctx) = @_;
- my $x = mid2blob($ctx) or return r404($ctx);
require PublicInbox::Mbox;
- PublicInbox::Mbox::emit1($ctx, $x);
+ PublicInbox::Mbox::emit_raw($ctx) || r404($ctx);
}
# /$INBOX/$MESSAGE_ID/ -> HTML content (short quotes)
sub get_mid_html {
my ($ctx) = @_;
- my $x = mid2blob($ctx) or return r404($ctx);
-
require PublicInbox::View;
- require PublicInbox::MIME;
- my $mime = PublicInbox::MIME->new($x);
searcher($ctx);
- PublicInbox::View::msg_html($ctx, $mime);
+ PublicInbox::View::msg_page($ctx) || r404($ctx);
}
# /$INBOX/$MESSAGE_ID/t/
}
sub serve_git {
- my ($ctx, $path) = @_;
- PublicInbox::GitHTTPBackend::serve($ctx->{env}, $ctx->{git}, $path);
+ my ($ctx, $part, $path) = @_;
+ my $env = $ctx->{env};
+ my $ibx = $ctx->{-inbox};
+ my $git = defined $part ? $ibx->git_part($part) : $ibx->git;
+ $git ? PublicInbox::GitHTTPBackend::serve($env, $git, $path) : r404();
}
sub mbox_results {