package PublicInbox::Config;
use strict;
-use warnings;
+use v5.10.1;
use PublicInbox::Inbox;
use PublicInbox::Spawn qw(popen_rd);
$self->{-iter} = [ \$i, $cb, $arg ];
}
-# for PublicInbox::DS::next_tick
+# 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);
- $cb->($self, $section, $arg);
+ eval { $cb->($self, $section, $arg) };
+ warn "E: $@ in ${self}::event_step" if $@;
+ PublicInbox::DS::requeue($self) if defined($section);
}
sub lookup_newsgroup {
# 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;
$ibx
}
+sub urlmatch {
+ my ($self, $key, $url) = @_;
+ state $urlmatch_broken; # requires git 1.8.5
+ return if $urlmatch_broken;
+ my $file = default_file();
+ my $cmd = [qw/git config -z --includes --get-urlmatch/,
+ "--file=$file", $key, $url ];
+ my $fh = popen_rd($cmd);
+ local $/ = "\0";
+ my $val = <$fh>;
+ if (close($fh)) {
+ chomp($val);
+ $val;
+ } else {
+ $urlmatch_broken = 1 if (($? >> 8) != 1);
+ undef;
+ }
+}
+
1;