about summary refs log tree commit homepage
path: root/lib/PublicInbox/TestCommon.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-04-28 07:51:56 +0000
committerEric Wong <e@80x24.org>2021-04-28 19:30:54 +0000
commit5e788baf14bd99cc7e428432479eae374343525a (patch)
tree8f783b751993a96b195c40480e36b14ef063dc58 /lib/PublicInbox/TestCommon.pm
parentc8183449e73a94f02a63778bf4d1c70a3ec2a0df (diff)
downloadpublic-inbox-5e788baf14bd99cc7e428432479eae374343525a.tar.gz
This simplifies test_lei users in t/*.t
Diffstat (limited to 'lib/PublicInbox/TestCommon.pm')
-rw-r--r--lib/PublicInbox/TestCommon.pm12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm
index 09256852..460c9da0 100644
--- a/lib/PublicInbox/TestCommon.pm
+++ b/lib/PublicInbox/TestCommon.pm
@@ -12,6 +12,7 @@ use IO::Socket::INET;
 use File::Spec;
 our @EXPORT;
 my $lei_loud = $ENV{TEST_LEI_ERR_LOUD};
+our ($lei_opt, $lei_out, $lei_err, $lei_cwdfh);
 BEGIN {
         @EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods
                 run_script start_script key2sub xsys xsys_e xqx eml_load tick
@@ -306,14 +307,16 @@ sub run_script ($;$$) {
                 local %SIG = %SIG;
                 local $0 = join(' ', @$cmd);
                 my $orig_io = _prepare_redirects($fhref);
-                my $cwdfh;
+                my $cwdfh = $lei_cwdfh;
                 if (my $d = $opt->{'-C'}) {
-                        opendir $cwdfh, '.' or die "opendir .: $!";
+                        unless ($cwdfh) {
+                                opendir $cwdfh, '.' or die "opendir .: $!";
+                        }
                         chdir $d or die "chdir $d: $!";
                 }
                 _run_sub($sub, $key, \@argv);
                 eval { PublicInbox::Inbox::cleanup_task() };
-                die "chdir(restore): $!" if $cwdfh && !chdir($cwdfh);
+                die "fchdir(restore): $!" if $cwdfh && !chdir($cwdfh);
                 _undo_redirects($orig_io);
                 select STDOUT;
         }
@@ -469,7 +472,6 @@ sub have_xapian_compact () {
         PublicInbox::Spawn::which($ENV{XAPIAN_COMPACT} || 'xapian-compact');
 }
 
-our ($lei_opt, $lei_out, $lei_err);
 # favor lei() or lei_ok() over $lei for new code
 sub lei (@) {
         my ($cmd, $env, $xopt) = @_;
@@ -515,6 +517,8 @@ sub test_lei {
 SKIP: {
         my ($cb) = pop @_;
         my $test_opt = shift // {};
+        local $lei_cwdfh;
+        opendir $lei_cwdfh, '.' or xbail "opendir .: $!";
         require_git(2.6, 1) or skip('git 2.6+ required for lei test', 2);
         require_mods(qw(json DBD::SQLite Search::Xapian), 2);
         require PublicInbox::Config;