push @repo_objs, $repo if $repo;
}
if (scalar @repo_objs) {
- require Scalar::Util;
for (@repo_objs) {
- push @{$_->{-ibxs}}, $ibxish;
- Scalar::Util::weaken($_->{-ibxs}->[-1]);
+ push @{$_->{ibx_names}}, $ibxish->{name};
}
$ibxish->{-repo_objs} = \@repo_objs;
} else {
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 return;
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}/";
- }
+ return $ALL->base_url // $ALL->base_url($ctx->{env});
+ } elsif (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;
+ return defined($ibx->{url}) ?
+ prurl($ctx->{env}, $ibx->{url}) :
+ "../../../$name/";
}
- } else {
- undef;
}
+ undef;
}
sub cmt_finalize {
$k = substr($k, length('publicinbox.'), -length('.coderepo'));
my $ibx = $pi_cfg->lookup_name($k) // next;
$pi_cfg->repo_objs($ibx);
- push @{$self->{-strong}}, $ibx; # strengthen {-ibxs} weakref
}
for my $k (grep(/\Aextindex\.(?:.+)\.coderepo\z/, keys %$pi_cfg)) {
$k = substr($k, length('extindex.'), -length('.coderepo'));
my $eidx = $pi_cfg->lookup_ei($k) // next;
$pi_cfg->repo_objs($eidx);
- push @{$self->{-strong}}, $eidx; # strengthen {-ibxs} weakref
}
}