my $w = syswrite($out, $buf);
if (defined $w) {
return if $w == length($buf);
- warn "chop: $w";
substr($buf, 0, $w, ''); # sv_chop
} elsif ($! != EAGAIN) {
$self->fail("write: $!");
- } else { warn "E: $!" }
+ }
$read_step->($self, $inflight);
} while (1);
}
sub host_prefix_url ($$) {
my ($env, $url) = @_;
return $url if index($url, '//') >= 0;
- my $scheme = $env->{'psgi.url_scheme'};
my $host_port = $env->{HTTP_HOST} //
"$env->{SERVER_NAME}:$env->{SERVER_PORT}";
- "$scheme://$host_port". ($env->{SCRIPT_NAME} || '/') . $url;
+ my $sn = $env->{SCRIPT_NAME} // '';
+ "$env->{'psgi.url_scheme'}://$host_port$sn/$url";
}
sub base_url { # for coderepos, PSGI-only
my ($self, $env) = @_; # env - PSGI env
+ my $nick = $self->{nick} // return undef;
my $url = host_prefix_url($env, '');
# for mount in Plack::Builder
$url .= '/' if substr($url, -1, 1) ne '/';
- $url . $self->{nick} . '/';
+ $url . $nick . '/';
}
sub isrch {} # TODO
sub pub_urls {
my ($self, $env) = @_;
if (my $urls = $self->{cgit_url}) {
- return map { host_prefix_url($env, $_) } @$urls;
+ map { host_prefix_url($env, $_) } @$urls;
+ } else {
+ (base_url($self, $env) // '???');
}
- (local_nick($self) // '???');
}
sub cat_async_begin {