From 7532117ee84d53aa042f33745355a4c785147c4e Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Mon, 18 Aug 2025 16:28:32 -0700 Subject: [PATCH 1/3] Properly clean-up for old env var value --- src/features/terminal/shells/bash/bashConstants.ts | 2 ++ src/features/terminal/shells/fish/fishConstants.ts | 3 ++- src/features/terminal/shells/pwsh/pwshConstants.ts | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/features/terminal/shells/bash/bashConstants.ts b/src/features/terminal/shells/bash/bashConstants.ts index ca004173..72c838e8 100644 --- a/src/features/terminal/shells/bash/bashConstants.ts +++ b/src/features/terminal/shells/bash/bashConstants.ts @@ -1,3 +1,5 @@ export const BASH_ENV_KEY = 'VSCODE_PYTHON_BASH_ACTIVATE'; export const ZSH_ENV_KEY = 'VSCODE_PYTHON_ZSH_ACTIVATE'; +export const BASH_OLD_ENV_KEY = 'VSCODE_BASH_ACTIVATE'; +export const ZSH_OLD_ENV_KEY = 'VSCODE_ZSH_ACTIVATE'; export const BASH_SCRIPT_VERSION = '0.1.1'; diff --git a/src/features/terminal/shells/fish/fishConstants.ts b/src/features/terminal/shells/fish/fishConstants.ts index 512fb9c1..84b598cf 100644 --- a/src/features/terminal/shells/fish/fishConstants.ts +++ b/src/features/terminal/shells/fish/fishConstants.ts @@ -1,2 +1,3 @@ -export const FISH_ENV_KEY = 'VSCODE_FISH_ACTIVATE'; +export const FISH_ENV_KEY = 'VSCODE_PYTHON_FISH_ACTIVATE'; +export const FISH_OLD_ENV_KEY = 'VSCODE_FISH_ACTIVATE'; export const FISH_SCRIPT_VERSION = '0.1.1'; diff --git a/src/features/terminal/shells/pwsh/pwshConstants.ts b/src/features/terminal/shells/pwsh/pwshConstants.ts index 0d79df50..bc49013e 100644 --- a/src/features/terminal/shells/pwsh/pwshConstants.ts +++ b/src/features/terminal/shells/pwsh/pwshConstants.ts @@ -1,2 +1,3 @@ export const POWERSHELL_ENV_KEY = 'VSCODE_PYTHON_PWSH_ACTIVATE'; +export const POWERSHELL_OLD_ENV_KEY = 'VSCODE_PWSH_ACTIVATE'; export const PWSH_SCRIPT_VERSION = '0.1.1'; From 69569c37c8cc81919586d8f5183be883bafeba28 Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Mon, 18 Aug 2025 17:13:38 -0700 Subject: [PATCH 2/3] Clean up for old stale env var --- src/features/terminal/shells/bash/bashStartup.ts | 12 ++++++++---- src/features/terminal/shells/fish/fishStartup.ts | 8 +++++--- src/features/terminal/shells/pwsh/pwshStartup.ts | 16 +++++++++------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/features/terminal/shells/bash/bashStartup.ts b/src/features/terminal/shells/bash/bashStartup.ts index 77adeb48..4394c5a3 100644 --- a/src/features/terminal/shells/bash/bashStartup.ts +++ b/src/features/terminal/shells/bash/bashStartup.ts @@ -7,7 +7,7 @@ import { ShellConstants } from '../../../common/shellConstants'; import { hasStartupCode, insertStartupCode, removeStartupCode } from '../common/editUtils'; import { shellIntegrationForActiveTerminal } from '../common/shellUtils'; import { ShellScriptEditState, ShellSetupState, ShellStartupScriptProvider } from '../startupProvider'; -import { BASH_ENV_KEY, BASH_SCRIPT_VERSION, ZSH_ENV_KEY } from './bashConstants'; +import { BASH_ENV_KEY, BASH_OLD_ENV_KEY, BASH_SCRIPT_VERSION, ZSH_ENV_KEY, ZSH_OLD_ENV_KEY } from './bashConstants'; async function isBashLikeInstalled(): Promise { const result = await Promise.all([which('bash', { nothrow: true }), which('sh', { nothrow: true })]); @@ -106,13 +106,13 @@ async function removeStartup(profile: string, key: string): Promise { const content = await fs.readFile(profile, 'utf8'); if (hasStartupCode(content, regionStart, regionEnd, [key])) { await fs.writeFile(profile, removeStartupCode(content, regionStart, regionEnd)); - traceInfo(`SHELL: Removed activation from profile at: ${profile}`); + traceInfo(`SHELL: Removed activation from profile at: ${profile}, for key: ${key}`); } else { - traceVerbose(`Profile at ${profile} does not contain activation code`); + traceVerbose(`Profile at ${profile} does not contain activation code, for key: ${key}`); } return true; } catch (err) { - traceVerbose(`Failed to remove ${profile} startup`, err); + traceVerbose(`Failed to remove ${profile} startup, for key: ${key}`, err); return false; } } @@ -171,6 +171,8 @@ export class BashStartupProvider implements ShellStartupScriptProvider { try { const bashProfile = await getBashProfiles(); + // Remove old environment variable if it exists + await removeStartup(bashProfile, BASH_OLD_ENV_KEY); const result = await removeStartup(bashProfile, BASH_ENV_KEY); return result ? ShellScriptEditState.Edited : ShellScriptEditState.NotEdited; } catch (err) { @@ -233,6 +235,7 @@ export class ZshStartupProvider implements ShellStartupScriptProvider { } try { const zshProfiles = await getZshProfiles(); + await removeStartup(zshProfiles, ZSH_OLD_ENV_KEY); const result = await removeStartup(zshProfiles, ZSH_ENV_KEY); return result ? ShellScriptEditState.Edited : ShellScriptEditState.NotEdited; } catch (err) { @@ -293,6 +296,7 @@ export class GitBashStartupProvider implements ShellStartupScriptProvider { try { const bashProfiles = await getBashProfiles(); + await removeStartup(bashProfiles, BASH_OLD_ENV_KEY); const result = await removeStartup(bashProfiles, BASH_ENV_KEY); return result ? ShellScriptEditState.Edited : ShellScriptEditState.NotEdited; } catch (err) { diff --git a/src/features/terminal/shells/fish/fishStartup.ts b/src/features/terminal/shells/fish/fishStartup.ts index 7b874d9b..bd5326eb 100644 --- a/src/features/terminal/shells/fish/fishStartup.ts +++ b/src/features/terminal/shells/fish/fishStartup.ts @@ -8,7 +8,7 @@ import { ShellConstants } from '../../../common/shellConstants'; import { hasStartupCode, insertStartupCode, removeStartupCode } from '../common/editUtils'; import { shellIntegrationForActiveTerminal } from '../common/shellUtils'; import { ShellScriptEditState, ShellSetupState, ShellStartupScriptProvider } from '../startupProvider'; -import { FISH_ENV_KEY, FISH_SCRIPT_VERSION } from './fishConstants'; +import { FISH_ENV_KEY, FISH_OLD_ENV_KEY, FISH_SCRIPT_VERSION } from './fishConstants'; async function isFishInstalled(): Promise { try { @@ -92,11 +92,11 @@ async function removeFishStartup(profilePath: string, key: string): Promise { +async function removePowerShellStartup(shell: string, profile: string, key: string): Promise { if (!(await fs.pathExists(profile))) { return true; } try { const content = await fs.readFile(profile, 'utf8'); - if (hasStartupCode(content, regionStart, regionEnd, [POWERSHELL_ENV_KEY])) { + if (hasStartupCode(content, regionStart, regionEnd, [key])) { await fs.writeFile(profile, removeStartupCode(content, regionStart, regionEnd)); - traceInfo(`SHELL: Removed activation from ${shell} profile at: ${profile}`); + traceInfo(`SHELL: Removed activation from ${shell} profile at: ${profile}, for key: ${key}`); } else { - traceInfo(`SHELL: No activation code found in ${shell} profile at: ${profile}`); + traceInfo(`SHELL: No activation code found in ${shell} profile at: ${profile}, for key: ${key}`); } return true; } catch (err) { - traceError(`SHELL: Failed to remove startup code for ${shell} profile at: ${profile}`, err); + traceError(`SHELL: Failed to remove startup code for ${shell} profile at: ${profile}, for key: ${key}`, err); return false; } } @@ -301,7 +301,9 @@ export class PwshStartupProvider implements ShellStartupScriptProvider { try { const profile = await getProfileForShell(shell); - const success = await removePowerShellStartup(shell, profile); + // Remove old environment variable if it exists + await removePowerShellStartup(shell, profile, POWERSHELL_OLD_ENV_KEY); + const success = await removePowerShellStartup(shell, profile, POWERSHELL_ENV_KEY); anyEdited.push(success ? ShellScriptEditState.Edited : ShellScriptEditState.NotEdited); } catch (err) { traceError(`Failed to remove ${shell} startup`, err); From 969e8408ab65eba592c35136a59b163b5d8a1fc0 Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Mon, 18 Aug 2025 17:59:26 -0700 Subject: [PATCH 3/3] Finalyl pwsh fix --- src/features/terminal/shells/pwsh/pwshStartup.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/features/terminal/shells/pwsh/pwshStartup.ts b/src/features/terminal/shells/pwsh/pwshStartup.ts index e8053f9e..6e0cf31e 100644 --- a/src/features/terminal/shells/pwsh/pwshStartup.ts +++ b/src/features/terminal/shells/pwsh/pwshStartup.ts @@ -146,7 +146,8 @@ async function isPowerShellStartupSetup(shell: string, profile: string): Promise async function setupPowerShellStartup(shell: string, profile: string): Promise { if (shellIntegrationForActiveTerminal(shell, profile)) { - removePowerShellStartup(shell, profile); + removePowerShellStartup(shell, profile, POWERSHELL_OLD_ENV_KEY); + removePowerShellStartup(shell, profile, POWERSHELL_ENV_KEY); return true; } const activationContent = getActivationContent();