@@ -216,7 +216,7 @@ it.layer(TestLayer)("GitVcsDriver core integration", (it) => {
216216 } ) ,
217217 ) ;
218218
219- it . effect ( "disables SSH askpass for background upstream status fetches" , ( ) =>
219+ it . effect ( "makes background upstream status fetches non-interactive " , ( ) =>
220220 Effect . gen ( function * ( ) {
221221 const cwd = yield * makeTmpDir ( ) ;
222222 const tempDir = yield * makeTmpDir ( "git-vcs-driver-ssh-env-" ) ;
@@ -225,15 +225,26 @@ it.layer(TestLayer)("GitVcsDriver core integration", (it) => {
225225 const pathService = yield * Path . Path ;
226226 const sshLogPath = pathService . join ( tempDir , "ssh-env.txt" ) ;
227227 const sshWrapperPath = pathService . join ( tempDir , "ssh-wrapper.sh" ) ;
228- const previousGitSsh = process . env . GIT_SSH ;
229- const previousAskpassRequire = process . env . SSH_ASKPASS_REQUIRE ;
230- const previousAskpassLog = process . env . T3_TEST_SSH_ASKPASS_LOG ;
228+ const envKeys = [
229+ "GCM_INTERACTIVE" ,
230+ "GIT_ASKPASS" ,
231+ "GIT_SSH" ,
232+ "GIT_TERMINAL_PROMPT" ,
233+ "SSH_ASKPASS" ,
234+ "SSH_ASKPASS_REQUIRE" ,
235+ "T3_TEST_SSH_ASKPASS_LOG" ,
236+ ] as const ;
237+ const previousEnv = new Map ( envKeys . map ( ( key ) => [ key , process . env [ key ] ] ) ) ;
231238
232239 yield * fileSystem . writeFileString (
233240 sshWrapperPath ,
234241 [
235242 "#!/bin/sh" ,
236- 'printf "%s\\n" "${SSH_ASKPASS_REQUIRE:-}" > "$T3_TEST_SSH_ASKPASS_LOG"' ,
243+ 'printf "GCM_INTERACTIVE=%s\\n" "${GCM_INTERACTIVE:-}" > "$T3_TEST_SSH_ASKPASS_LOG"' ,
244+ 'printf "GIT_ASKPASS=%s\\n" "${GIT_ASKPASS:-}" >> "$T3_TEST_SSH_ASKPASS_LOG"' ,
245+ 'printf "GIT_TERMINAL_PROMPT=%s\\n" "${GIT_TERMINAL_PROMPT:-}" >> "$T3_TEST_SSH_ASKPASS_LOG"' ,
246+ 'printf "SSH_ASKPASS=%s\\n" "${SSH_ASKPASS:-}" >> "$T3_TEST_SSH_ASKPASS_LOG"' ,
247+ 'printf "SSH_ASKPASS_REQUIRE=%s\\n" "${SSH_ASKPASS_REQUIRE:-}" >> "$T3_TEST_SSH_ASKPASS_LOG"' ,
237248 "exit 1" ,
238249 "" ,
239250 ] . join ( "\n" ) ,
@@ -245,29 +256,32 @@ it.layer(TestLayer)("GitVcsDriver core integration", (it) => {
245256
246257 yield * Effect . gen ( function * ( ) {
247258 process . env . GIT_SSH = sshWrapperPath ;
259+ process . env . GCM_INTERACTIVE = "always" ;
260+ process . env . GIT_ASKPASS = "git-askpass" ;
261+ process . env . GIT_TERMINAL_PROMPT = "1" ;
262+ process . env . SSH_ASKPASS = "ssh-askpass" ;
248263 process . env . SSH_ASKPASS_REQUIRE = "force" ;
249264 process . env . T3_TEST_SSH_ASKPASS_LOG = sshLogPath ;
250265
251266 yield * ( yield * GitVcsDriver . GitVcsDriver ) . statusDetails ( cwd ) ;
252267
253- assert . equal ( ( yield * fileSystem . readFileString ( sshLogPath ) ) . trim ( ) , "never" ) ;
268+ assert . deepEqual ( ( yield * fileSystem . readFileString ( sshLogPath ) ) . trim ( ) . split ( / \r ? \n / ) , [
269+ "GCM_INTERACTIVE=never" ,
270+ "GIT_ASKPASS=" ,
271+ "GIT_TERMINAL_PROMPT=0" ,
272+ "SSH_ASKPASS=" ,
273+ "SSH_ASKPASS_REQUIRE=never" ,
274+ ] ) ;
254275 } ) . pipe (
255276 Effect . ensuring (
256277 Effect . sync ( ( ) => {
257- if ( previousGitSsh === undefined ) {
258- delete process . env . GIT_SSH ;
259- } else {
260- process . env . GIT_SSH = previousGitSsh ;
261- }
262- if ( previousAskpassRequire === undefined ) {
263- delete process . env . SSH_ASKPASS_REQUIRE ;
264- } else {
265- process . env . SSH_ASKPASS_REQUIRE = previousAskpassRequire ;
266- }
267- if ( previousAskpassLog === undefined ) {
268- delete process . env . T3_TEST_SSH_ASKPASS_LOG ;
269- } else {
270- process . env . T3_TEST_SSH_ASKPASS_LOG = previousAskpassLog ;
278+ for ( const key of envKeys ) {
279+ const previous = previousEnv . get ( key ) ;
280+ if ( previous === undefined ) {
281+ delete process . env [ key ] ;
282+ } else {
283+ process . env [ key ] = previous ;
284+ }
271285 }
272286 } ) ,
273287 ) ,
0 commit comments