use POSIX qw(dup2);
use IO::Socket::INET;
our @EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods
- run_script start_script key2sub xsys xqx eml_load);
+ run_script start_script key2sub xsys xqx eml_load tick);
sub eml_load ($) {
my ($path, $cb) = @_;
my @mods = @_;
my $maybe = pop @mods if $mods[-1] =~ /\A[0-9]+\z/;
my @need;
- for my $mod (@mods) {
+ while (my $mod = shift(@mods)) {
if ($mod eq 'Search::Xapian') {
if (eval { require PublicInbox::Search } &&
PublicInbox::Search::load_xapian()) {
PublicInbox::SearchIdx::load_xapian_writable()){
next;
}
+ } elsif (index($mod, '||') >= 0) { # "Foo||Bar"
+ my $ok;
+ for my $m (split(/\Q||\E/, $mod)) {
+ eval "require $m";
+ next if $@;
+ $ok = $m;
+ last;
+ }
+ next if $ok;
} else {
eval "require $mod";
}
- push @need, $mod if $@;
+ if ($@) {
+ push @need, $mod;
+ } elsif ($mod eq 'IO::Socket::SSL' &&
+ # old versions of IO::Socket::SSL aren't supported
+ # by libnet, at least:
+ # https://rt.cpan.org/Ticket/Display.html?id=100529
+ !eval{ IO::Socket::SSL->VERSION(2.007); 1 }) {
+ push @need, $@;
+ }
}
return unless @need;
my $m = join(', ', @need)." missing for $0";
}
$0 = join(' ', @$cmd);
if ($sub) {
+ eval { PublicInbox::DS->Reset };
_run_sub($sub, $key, \@argv);
POSIX::_exit($? >> 8);
} else {
$self->join('TERM');
}
+package PublicInbox::TestCommon::InboxWakeup;
+use strict;
+sub on_inbox_unlock { ${$_[0]}->($_[1]) }
+
1;