use IO::Poll qw(POLLIN);
use Carp qw(croak carp);
use Digest::SHA ();
-use PublicInbox::DS qw(dwaitpid);
+use PublicInbox::DS qw(awaitpid);
our @EXPORT_OK = qw(git_unquote git_quote);
our $PIPE_BUFSIZ = 65536; # Linux default
our $in_cleanup;
$rdr->{2} = $fh;
}
my ($in_r, $p) = popen_rd(\@cmd, undef, $rdr);
- $self->{$pid} = $p;
+ awaitpid($self->{$pid} = $p, undef);
$self->{"$pid.owner"} = $$;
$out_w->autoflush(1);
if ($^O eq 'linux') { # 1031: F_SETPIPE_SZ
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);
}
delete @$self{($rbuf, $in, $out)};
delete $self->{$err} if $err; # `err_c'
- # GitAsyncCat::event_step may delete {pid}
- my $p = delete $self->{$pid} or return;
- dwaitpid($p) if $$ == $self->{"$pid.owner"};
+ # GitAsyncCat::event_step may delete {$pid}
+ my $p = delete($self->{$pid}) // return;
+ awaitpid($p) if $$ == $self->{"$pid.owner"};
}
sub async_abort ($) {
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 {