a particular limiter (L<BSD::Resource(3pm)> is required).
Default named-limiters are prefixed with "-". Currently,
-the "-cgit" named limiter is reserved for instances spawning
-cgit via C<publicinbox.cgitrc>
+the C<-cgit> named limiter is reserved for instances spawning
+cgit via C<publicinbox.cgitrc>. The C<-httpbackend> named
+limiter (in public-inbox 2.0+) governs all L<git-http-backend(1)>
+processes for inboxes and coderepos for a given public-inbox
+config file.
=over 8
if ($path_info =~ m!\A/(.+?)/($PublicInbox::GitHTTPBackend::ANY)\z!ox) {
my ($nick, $path) = ($1, $2);
if (my $git = $self->{pi_cfg}->get_coderepo($nick)) {
- return serve($env, $git, $path);
+ return serve($env, $git, $path, $self->{pi_cfg});
}
} elsif ($path_info =~ m!$self->{static}! &&
defined($cgit_data = $self->{cgit_data})) {
my $TEXT = join('|', @text);
sub serve {
- my ($env, $git, $path) = @_;
+ my ($env, $git, $path, $pi_cfg) = @_;
# Documentation/technical/http-protocol.txt in git.git
# requires one and exactly one query parameter:
if ($env->{QUERY_STRING} =~ /\Aservice=git-[A-Za-z0-9_]+-pack\z/ ||
$path =~ /\Agit-[A-Za-z0-9_]+-pack\z/) {
- my $ok = serve_smart($env, $git, $path);
+ my $ok = serve_smart($env, $git, $path, $pi_cfg);
return $ok if $ok;
}
}
# returns undef if 403 so it falls back to dumb HTTP
-sub serve_smart {
- my ($env, $git, $path) = @_;
+sub serve_smart ($$$;$) {
+ my ($env, $git, $path, $pi_cfg) = @_;
my %env = %ENV;
# GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL
# may be set in the server-process and are passed as-is
my $val = $env->{$name};
$env{$name} = $val if defined $val;
}
- my $limiter = $git->{-httpbackend_limiter} || $default_limiter;
+ my $limiter = $git->{-httpbackend_limiter} //
+ ($pi_cfg ? $pi_cfg->limiter('-httpbackend') : undef) //
+ $default_limiter;
$env{GIT_HTTP_EXPORT_ALL} = '1';
$env{PATH_TRANSLATED} = "$git->{git_dir}/$path";
my $rdr = input_prepare($env) or return r(500);
sub serve_git {
my ($ctx, $epoch, $path) = @_;
- my $env = $ctx->{env};
my $ibx = $ctx->{ibx};
my $git = defined $epoch ? $ibx->git_epoch($epoch) : $ibx->git;
- $git ? PublicInbox::GitHTTPBackend::serve($env, $git, $path) : r404();
+ $git ? PublicInbox::GitHTTPBackend::serve($ctx->{env},
+ $git, $path, $ctx->{www}->{pi_cfg}) : r404();
}
sub mbox_results {
my $pi_cfg = $self->{pi_cfg};
if ($path_info =~ m!\A/(.+?)/($PublicInbox::GitHTTPBackend::ANY)\z!x and
($git = $pi_cfg->get_coderepo($1))) {
- PublicInbox::GitHTTPBackend::serve($ctx->{env},$git,$2);
+ PublicInbox::GitHTTPBackend::serve($ctx->{env},
+ $git, $2, $pi_cfg);
} elsif ($path_info =~ m!\A/(.+?)/\z! and
($ctx->{git} = $pi_cfg->get_coderepo($1))) {
$ctx->{wcr} = $self;