# This makes qspawn skip ->async_pass and causes
# PublicInbox::HTTPD::Async::event_step to close shortly after
if ($code == 404 && $ctx->{www} && !$ctx->{_coderepo_tried}++) {
- my %ctx = %$ctx;
- $ctx{env} = +{ %{$ctx->{env}} };
- delete $ctx->{env}->{'qspawn.wcb'};
+ my $wcb = delete $ctx->{env}->{'qspawn.wcb'};
$ctx->{env}->{'plack.skip-deflater'} = 1; # prevent 2x gzip
- my $res = $ctx->{www}->coderepo->srv(\%ctx);
- # for ->psgi_return_init_cb:
- $ctx->{env}->{'qspawn.wcb'} = $ctx{env}->{'qspawn.wcb'};
+ my $res = $ctx->{www}->coderepo->srv($ctx);
+ # for ->psgi_return_init_cb
+ $ctx->{env}->{'qspawn.wcb'} = $wcb;
$res; # CODE or ARRAY ref
} else {
[ $code, \@h ]
my $cmd = ['git', "--git-dir=$git->{git_dir}", 'cat-file', $type, $oid];
my $qsp = PublicInbox::Qspawn->new($cmd);
my $env = $ctx->{env};
- $env->{'qspawn.wcb'} = delete $ctx->{-wcb};
+ $env->{'qspawn.wcb'} = $ctx->{-wcb};
$qsp->psgi_return($env, undef, \&stream_blob_parse_hdr, $ctx);
}
Every commit references one top-level <dfn id=tree>tree</dfn> object.</pre>
EOM
- delete($ctx->{env}->{'qspawn.wcb'})->($ctx->html_done($x));
+ delete($ctx->{-wcb})->($ctx->html_done($x));
}
sub stream_patch_parse_hdr { # {parse_hdr} for Qspawn
qw(format-patch -1 --stdout -C),
"--signature=git format-patch -1 --stdout -C $oid", $oid);
my $qsp = PublicInbox::Qspawn->new(\@cmd);
- $ctx->{env}->{'qspawn.wcb'} = delete $ctx->{-wcb};
+ $ctx->{env}->{'qspawn.wcb'} = $ctx->{-wcb};
$ctx->{patch_oid} = $oid;
$qsp->psgi_return($ctx->{env}, undef, \&stream_patch_parse_hdr, $ctx);
}
my $e = { GIT_DIR => $git->{git_dir} };
my $qsp = PublicInbox::Qspawn->new($cmd, $e, { -C => "$ctx->{-tmp}" });
$qsp->{qsp_err} = \($ctx->{-qsp_err} = '');
- $ctx->{env}->{'qspawn.wcb'} = delete $ctx->{-wcb};
+ $ctx->{env}->{'qspawn.wcb'} = $ctx->{-wcb};
$ctx->{git} = $git;
$qsp->psgi_qx($ctx->{env}, undef, \&show_commit_start, $ctx);
}