X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FTestCommon.pm;h=386610ff5cbf6551eb5eda949ee3d8d1536f1776;hb=95bdac7f09c69036efed537a4d03d5bdd2ae4eb6;hp=532cbee676b2ac5b5184ddf24df2ed417c757bf0;hpb=267371b1273b518215939e817e53733584b68af7;p=public-inbox.git diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index 532cbee6..386610ff 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2019 all contributors +# Copyright (C) 2015-2020 all contributors # License: AGPL-3.0+ # internal APIs used only for tests @@ -65,11 +65,15 @@ sub require_mods { my @need; for my $mod (@mods) { if ($mod eq 'Search::Xapian') { - require PublicInbox::Search; - PublicInbox::Search::load_xapian() and next; + if (eval { require PublicInbox::Search } && + PublicInbox::Search::load_xapian()) { + next; + } } elsif ($mod eq 'Search::Xapian::WritableDatabase') { - require PublicInbox::SearchIdx; - PublicInbox::SearchIdx::load_xapian_writable() and next; + if (eval { require PublicInbox::SearchIdx } && + PublicInbox::SearchIdx::load_xapian_writable()){ + next; + } } else { eval "require $mod"; } @@ -191,21 +195,26 @@ sub run_script ($;$$) { my $spawn_opt = {}; for my $fd (0..2) { my $redir = $opt->{$fd}; - next unless ref($redir); - open my $fh, '+>', undef or die "open: $!"; - $fhref->[$fd] = $fh; - $spawn_opt->{$fd} = $fh; - next if $fd > 0; - $fh->autoflush(1); - print $fh $$redir or die "print: $!"; - seek($fh, 0, SEEK_SET) or die "seek: $!"; + my $ref = ref($redir); + if ($ref eq 'SCALAR') { + open my $fh, '+>', undef or die "open: $!"; + $fhref->[$fd] = $fh; + $spawn_opt->{$fd} = $fh; + next if $fd > 0; + $fh->autoflush(1); + print $fh $$redir or die "print: $!"; + seek($fh, 0, SEEK_SET) or die "seek: $!"; + } elsif ($ref eq 'GLOB') { + $spawn_opt->{$fd} = $fhref->[$fd] = $redir; + } elsif ($ref) { + die "unable to deal with $ref $redir"; + } } if ($run_mode == 0) { # spawn an independent new process, like real-world use cases: require PublicInbox::Spawn; my $cmd = [ key2script($key), @argv ]; my $pid = PublicInbox::Spawn::spawn($cmd, $env, $spawn_opt); - defined($pid) or die "spawn: $!"; if (defined $pid) { my $r = waitpid($pid, 0); defined($r) or die "waitpid: $!";