]> Sergey Matveev's repositories - public-inbox.git/commitdiff
test_common: handle '-C' (chdir) spawn option properly
authorEric Wong <e@80x24.org>
Fri, 16 Apr 2021 23:10:31 +0000 (16:10 -0700)
committerEric Wong <e@80x24.org>
Sat, 17 Apr 2021 02:24:47 +0000 (22:24 -0400)
We use it in t/lei-q-save.t, and were inadvertently writing
to the worktree.

v2: fix -C $DIR with TEST_RUN_MODE=0

lib/PublicInbox/TestCommon.pm

index d506e4b5b5b8d0591ae1dbaf13f7ee9fbe344db2..2627871a3c3f202f5c3d0eab75ee3ae42a9c694f 100644 (file)
@@ -290,6 +290,10 @@ sub run_script ($;$$) {
                # spawn an independent new process, like real-world use cases:
                require PublicInbox::Spawn;
                my $cmd = [ key2script($key), @argv ];
+               if (my $d = $opt->{'-C'}) {
+                       $cmd->[0] = File::Spec->rel2abs($cmd->[0]);
+                       $spawn_opt->{'-C'} = $d;
+               }
                my $pid = PublicInbox::Spawn::spawn($cmd, $env, $spawn_opt);
                if (defined $pid) {
                        my $r = waitpid($pid, 0) // die "waitpid: $!";
@@ -302,8 +306,14 @@ sub run_script ($;$$) {
                local %SIG = %SIG;
                local $0 = join(' ', @$cmd);
                my $orig_io = _prepare_redirects($fhref);
+               my $cwdfh;
+               if (my $d = $opt->{'-C'}) {
+                       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);
                _undo_redirects($orig_io);
                select STDOUT;
        }