# if keys may be multi-value, the value is an array ref containing all values
sub new {
my ($class, $file) = @_;
- $file = default_file() unless defined($file);
+ $file //= default_file();
my $self;
if (ref($file) eq 'SCALAR') { # used by some tests
open my $fh, '<', $file or die; # PerlIO::scalar
sub config_dir { $ENV{PI_DIR} // "$ENV{HOME}/.public-inbox" }
sub default_file {
- my $f = $ENV{PI_CONFIG};
- return $f if defined $f;
- config_dir() . '/config';
+ $ENV{PI_CONFIG} // (config_dir() . '/config');
}
sub config_fh_parse ($$$) {
$git;
}
-sub _git_config_bool ($) {
- my ($val) = @_;
+sub git_bool {
+ my ($val) = $_[-1]; # $_[0] may be $self, or $val
if ($val =~ /\A(?:false|no|off|[\-\+]?(?:0x)?0+)\z/i) {
0;
} elsif ($val =~ /\A(?:true|yes|on|[\-\+]?(?:0x)?[0-9]+)\z/i) {
foreach my $k (qw(inboxdir filter newsgroup
watch httpbackendmax
- replyto feedmax nntpserver indexlevel)) {
+ replyto feedmax nntpserver
+ indexlevel indexsequentialshard)) {
my $v = $self->{"$pfx.$k"};
$ibx->{$k} = $v if defined $v;
}
# backwards compatibility:
$ibx->{inboxdir} //= $self->{"$pfx.mainrepo"};
-
+ if (($ibx->{inboxdir} // '') =~ /\n/s) {
+ warn "E: `$ibx->{inboxdir}' must not contain `\\n'\n";
+ return;
+ }
foreach my $k (qw(obfuscate)) {
my $v = $self->{"$pfx.$k"};
defined $v or next;
- if (defined(my $bval = _git_config_bool($v))) {
+ if (defined(my $bval = git_bool($v))) {
$ibx->{$k} = $bval;
} else {
warn "Ignoring $pfx.$k=$v in config, not boolean\n";