X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FGit.pm;h=c9ed48be9397231e81bc80ee2e7a590785153b72;hb=2d95420e2255db25c0a5d9ec1dfee13aef1dcff6;hp=86b80a4edb877152f566c00a7b804952516e907b;hpb=d4ba8828ab23f2785be54493495bbf7e1d62c0b0;p=public-inbox.git diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 86b80a4e..c9ed48be 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -21,7 +21,7 @@ use PublicInbox::Tmpfile; 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; @@ -138,7 +138,7 @@ sub _bidi_pipe { $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 @@ -315,11 +315,10 @@ sub write_all { 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); } @@ -358,9 +357,9 @@ sub _destroy { 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 ($) { @@ -478,18 +477,19 @@ sub local_nick ($) { 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 @@ -497,9 +497,10 @@ 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 {