$self->{-no_obfuscate} = {};
$self->{-limiters} = {};
$self->{-code_repos} = {}; # nick => PublicInbox::Git object
- $self->{-cgitrc_unparsed} = $self->{'publicinbox.cgitrc'};
if (my $no = delete $self->{'publicinbox.noobfuscate'}) {
$no = _array($no);
$rel =~ s!/?\.git\z!!;
}
$self->{"coderepo.$rel.dir"} //= $path;
- $self->{"coderepo.$rel.cgiturl"} //= _array($rel);
}
sub is_git_dir ($) {
sub parse_cgitrc {
my ($self, $cgitrc, $nesting) = @_;
+ $cgitrc //= $self->{'publicinbox.cgitrc'} // return;
if ($nesting == 0) {
# defaults:
my %s = map { $_ => 1 } qw(/cgit.css /cgit.png
} elsif (m!\A(?:css|favicon|logo|repo\.logo)=(/.+)\z!) {
# absolute paths for static files via PublicInbox::Cgit
$self->{-cgit_static}->{$1} = 1;
+ } elsif (s!\Asnapshots=\s*!!) {
+ $self->{'coderepo.snapshots'} = $_;
}
}
cgit_repo_merge($self, $repo->{dir}, $repo) if $repo;
my ($self, $ibxish) = @_;
my $ibx_code_repos = $ibxish->{coderepo} // return;
$ibxish->{-repo_objs} // do {
+ parse_cgitrc($self, undef, 0);
my $code_repos = $self->{-code_repos};
my @repo_objs;
for my $nick (@$ibx_code_repos) {
push @repo_objs, $repo if $repo;
}
if (scalar @repo_objs) {
+ for (@repo_objs) {
+ push @{$_->{ibx_names}}, $ibxish->{name};
+ }
$ibxish->{-repo_objs} = \@repo_objs;
} else {
delete $ibxish->{coderepo};
}
sub urlmatch {
- my ($self, $key, $url) = @_;
+ my ($self, $key, $url, $try_git) = @_;
state $urlmatch_broken; # requires git 1.8.5
return if $urlmatch_broken;
my $file = $self->{'-f'} // default_file();
my $fh = popen_rd($cmd);
local $/ = "\0";
my $val = <$fh>;
- if (close($fh)) {
- chomp($val);
- $val;
- } else {
- $urlmatch_broken = 1 if (($? >> 8) != 1);
- undef;
+ if (!close($fh)) {
+ undef $val;
+ if (($? >> 8) != 1) {
+ $urlmatch_broken = 1;
+ } elsif ($try_git) { # n.b. this takes cwd into account
+ $cmd = [qw(git config -z --get-urlmatch), $key, $url];
+ $fh = popen_rd($cmd);
+ $val = <$fh>;
+ close($fh) or undef($val);
+ }
}
+ $? = 0; # don't influence lei exit status
+ chomp $val if defined $val;
+ $val;
}
sub json {