From: Eric Wong Date: Fri, 16 Apr 2021 23:10:31 +0000 (-0700) Subject: test_common: handle '-C' (chdir) spawn option properly X-Git-Tag: v1.7.0~803 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=315157c2e0c52e9e7b8078ba5c8b79e0b1a3802e;p=public-inbox.git test_common: handle '-C' (chdir) spawn option properly 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 --- diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index d506e4b5..2627871a 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -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; }