lib/PublicInbox/WwwText.pm | 29 ++++++++++++++++++++++++++++- t/extindex-psgi.t | 12 ++++++++++++ diff --git a/lib/PublicInbox/WwwText.pm b/lib/PublicInbox/WwwText.pm index db5060eaa460bf002c4377b93eb1b14c1cd5c7ba..eb5e3ac7b3edf49a0a049ab2503cd3e5c59798a0 100644 --- a/lib/PublicInbox/WwwText.pm +++ b/lib/PublicInbox/WwwText.pm @@ -214,10 +214,37 @@ } 1; } +# n.b. this is a perfect candidate for memoization +sub extindex_config ($$$) { + my ($ctx, $hdr, $txt) = @_; + my $ibx = $ctx->{ibx}; + push @$hdr, 'Content-Disposition', 'inline; filename=extindex.config'; + my $name = dq_escape($ibx->{name}); + my $base_url = $ibx->base_url($ctx->{env}); + $$txt .= <{$k}) or next; + $$txt .= "\t$k = $v\n"; + } + # TODO: coderepo support for extindex + 1; +} + sub _default_text ($$$$) { my ($ctx, $key, $hdr, $txt) = @_; return _colors_help($ctx, $txt) if $key eq 'color'; - return inbox_config($ctx, $hdr, $txt) if $key eq 'config'; + $key eq 'config' and return $ctx->{ibx}->can('cloneurl') ? + inbox_config($ctx, $hdr, $txt) : + extindex_config($ctx, $hdr, $txt); return if $key ne 'help'; # TODO more keys? my $ibx = $ctx->{ibx}; diff --git a/t/extindex-psgi.t b/t/extindex-psgi.t index 6f62b5a035be0cd040a78876f8609116e4d5d4a7..b9acc9793292b6d3b7a7189853c01b75af186279 100644 --- a/t/extindex-psgi.t +++ b/t/extindex-psgi.t @@ -40,6 +40,18 @@ like($res->content, qr!http://usethis\.example\.com/!s, 'Host: header respected in Atom feed'); unlike($res->content, qr!http://bogus\.example\.com/!s, 'default URL ignored with different host header'); + + $res = $cb->(GET('/all/_/text/config/')); + is($res->code, 200, '/text/config HTML'); + $res = $cb->(GET('/all/_/text/config/raw')); + is($res->code, 200, '/text/config raw'); + my $f = "$tmpdir/extindex.config"; + open my $fh, '>', $f or xbail $!; + print $fh $res->content or xbail $!; + close $fh or xbail $!; + my $cfg = PublicInbox::Config->git_config_dump($f); + is($?, 0, 'no errors from git-config parsing'); + ok($cfg->{'extindex.all.topdir'}, 'extindex.topdir defined'); }; test_psgi(sub { $www->call(@_) }, $client); %$env = (%$env, TMPDIR => $tmpdir, PI_CONFIG => $pi_config);