X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FConfig.pm;h=d57c361ad90cd8364629201021b485c7b715cb46;hb=d94b6dd63438174888db27f3a61ffdcf7d1a99da;hp=c0e2cc575ec640ff1532edcc16d501660e5e4f28;hpb=67592c40510dae8604580cf4b2a0a0f665b84501;p=public-inbox.git diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index c0e2cc57..d57c361a 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -19,7 +19,7 @@ sub _array ($) { ref($_[0]) eq 'ARRAY' ? $_[0] : [ $_[0] ] } # 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 @@ -90,33 +90,15 @@ sub lookup_name ($$) { } sub each_inbox { - my ($self, $cb, $arg) = @_; + my ($self, $cb, @arg) = @_; # may auto-vivify if config file is non-existent: foreach my $section (@{$self->{-section_order}}) { next if $section !~ m!\Apublicinbox\.([^/]+)\z!; my $ibx = lookup_name($self, $1) or next; - $cb->($ibx, $arg); + $cb->($ibx, @arg); } } -sub iterate_start { - my ($self, $cb, $arg) = @_; - my $i = 0; - $self->{-iter} = [ \$i, $cb, $arg ]; -} - -# for PublicInbox::DS::next_tick, we only call this is if -# PublicInbox::DS is already loaded -sub event_step { - my ($self) = @_; - my ($i, $cb, $arg) = @{$self->{-iter}}; - my $section = $self->{-section_order}->[$$i++]; - delete($self->{-iter}) unless defined($section); - eval { $cb->($self, $section, $arg) }; - warn "E: $@ in ${self}::event_step" if $@; - PublicInbox::DS::requeue($self) if defined($section); -} - sub lookup_newsgroup { my ($self, $ng) = @_; _lookup_fill($self, '-by_newsgroup', lc($ng)); @@ -136,9 +118,7 @@ sub limiter { 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 ($$$) { @@ -369,8 +349,8 @@ sub _fill_code_repo { $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) { @@ -384,20 +364,34 @@ sub _fill { my ($self, $pfx) = @_; my $ibx = {}; - foreach my $k (qw(inboxdir filter newsgroup - watch httpbackendmax - replyto feedmax nntpserver indexlevel)) { + for my $k (qw(watch nntpserver)) { my $v = $self->{"$pfx.$k"}; $ibx->{$k} = $v if defined $v; } + for my $k (qw(filter inboxdir newsgroup replyto httpbackendmax feedmax + indexlevel indexsequentialshard)) { + if (defined(my $v = $self->{"$pfx.$k"})) { + if (ref($v) eq 'ARRAY') { + warn <[-1]' +EOF + $ibx->{$k} = $v->[-1]; + } else { + $ibx->{$k} = $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"; @@ -430,8 +424,9 @@ sub _fill { $self->{-no_obfuscate}->{$lc_addr} = 1; } if (my $listids = $ibx->{listid}) { + # RFC2919 section 6 stipulates "case insensitive equality" foreach my $list_id (@$listids) { - $self->{-by_list_id}->{$list_id} = $ibx; + $self->{-by_list_id}->{lc($list_id)} = $ibx; } } if (my $ng = $ibx->{newsgroup}) {