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);
}
-sub show_other_result ($$) { # tag
+sub show_other_result ($$) { # future-proofing
my ($bref, $ctx) = @_;
if (my $qsp_err = delete $ctx->{-qsp_err}) {
return html_page($ctx, 500, dbg_log($ctx) .
sub ibx_url_for {
my ($ctx) = @_;
- $ctx->{ibx} and return; # just fall back to $upfx
- $ctx->{git} or return; # /$CODEREPO/$OID/s/ to (eidx|ibx)
+ $ctx->{ibx} and return; # fall back to $upfx
+ $ctx->{git} or die 'BUG: no {git}';
if (my $ALL = $ctx->{www}->{pi_cfg}->ALL) {
- $ALL->base_url // $ALL->base_url($ctx->{env});
- } elsif (my $ibxs = $ctx->{git}->{-ibxs}) {
- for my $ibx (@$ibxs) {
- if ($ibx->isrch) {
- return defined($ibx->{url}) ?
- prurl($ctx->{env}, $ibx->{url}) :
- "../../../$ibx->{name}/";
- }
+ if (defined(my $u = $ALL->base_url($ctx->{env}))) {
+ return wantarray ? ($u) : $u;
}
- } else {
- undef;
}
+ my @ret;
+ if (my $ibx_names = $ctx->{git}->{ibx_names}) {
+ my $by_name = $ctx->{www}->{pi_cfg}->{-by_name};
+ for my $name (@$ibx_names) {
+ my $ibx = $by_name->{$name} // do {
+ warn "inbox `$name' no longer exists\n";
+ next;
+ };
+ $ibx->isrch // next;
+ my $u = defined($ibx->{url}) ?
+ prurl($ctx->{env}, $ibx->{url}) : $name;
+ $u .= '/' if substr($u, -1) ne '/';
+ push @ret, $u;
+ }
+ }
+ wantarray ? (@ret) : $ret[0];
}
sub cmt_finalize {
my $zfh = $ctx->zfh;
print $zfh <<EOM;
<pre> <a href=#commit>commit</a> $H$x
- <a href=#tree>tree</a> <a href="$upfx$T/s/">$T</a>
+ <a href=#tree>tree</a> <a href="$upfx$T/s/?b=">$T</a>
author $au
committer $co
my $ibx_url = ibx_url_for($ctx);
my $alt;
if (defined $ibx_url) {
+ $alt = " `$ibx_url'";
+ $ibx_url =~ m!://! or
+ substr($ibx_url, 0, 0, '../../../');
$ibx_url = ascii_html($ibx_url);
- $alt = ' '.$ibx_url;
} else {
$ibx_url = $upfx;
$alt = '';
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);
}
my $pfx = $qp->{b};
$$bref = "<pre><a href=#tree>tree</a> $ctx->{tree_oid}";
if (defined $pfx) {
- my $x = ascii_html($pfx);
- $pfx .= '/';
- $$bref .= qq( <a href=#path>path</a>: $x</a>\n);
+ if ($pfx eq '') {
+ $$bref .= " (root)\n";
+ } else {
+ my $x = ascii_html($pfx);
+ $pfx .= '/';
+ $$bref .= qq( <a href=#path>path</a>: $x</a>\n);
+ }
} else {
$pfx = '';
$$bref .= qq[ (<a href=#path>path</a> unknown)\n];