From 3685f8c51e6a032c163514a5ca7772462ad9c280 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Mon, 11 Aug 2025 16:12:50 +0200 Subject: [PATCH] [terminal] IJPL-200767 ensure `System.getenv()` is used when running locally (cherry picked from commit febc4398231efadf4f1a9db1c6d9505304b4f760) IJ-CR-172066 GitOrigin-RevId: b195691effa8e8de38bcdde5e7a869a4cf0668de --- .../runner/LocalOptionsConfigurer.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/plugins/terminal/src/org/jetbrains/plugins/terminal/runner/LocalOptionsConfigurer.java b/plugins/terminal/src/org/jetbrains/plugins/terminal/runner/LocalOptionsConfigurer.java index 3ab06f5d6fa4..ed143ee18487 100644 --- a/plugins/terminal/src/org/jetbrains/plugins/terminal/runner/LocalOptionsConfigurer.java +++ b/plugins/terminal/src/org/jetbrains/plugins/terminal/runner/LocalOptionsConfigurer.java @@ -8,13 +8,14 @@ import com.intellij.openapi.components.PathMacroManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectUtil; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.impl.wsl.WslConstants; import com.intellij.platform.eel.EelDescriptor; +import com.intellij.platform.eel.EelPlatformKt; import com.intellij.platform.eel.provider.EelProviderUtil; +import com.intellij.platform.eel.provider.LocalEelDescriptor; import com.intellij.platform.eel.provider.utils.EelUtilsKt; import com.intellij.terminal.ui.TerminalWidget; import com.intellij.util.EnvironmentRestorer; @@ -113,23 +114,20 @@ public final class LocalOptionsConfigurer { private static @NotNull Map getTerminalEnvironment(@NotNull Map baseEnvs, @NotNull String workingDir, @NotNull Project project, - @Nullable EelDescriptor eelDescriptor) { - final var isWindows = - eelDescriptor == null - ? SystemInfo.isWindows - : switch (eelDescriptor.getOsFamily()) { - case Posix -> false; - case Windows -> true; - }; + @NotNull EelDescriptor eelDescriptor) { + final var isWindows = EelPlatformKt.isWindows(eelDescriptor.getOsFamily()); Map envs = isWindows ? CollectionFactory.createCaseInsensitiveStringMap() : new HashMap<>(); EnvironmentVariablesData envData = TerminalProjectOptionsProvider.getInstance(project).getEnvData(); if (envData.isPassParentEnvs()) { - if (eelDescriptor != null) { - envs.putAll(fetchLoginShellEnvVariables(eelDescriptor)); + if (eelDescriptor == LocalEelDescriptor.INSTANCE) { + // Use the default environment variables when running locally. + // Calling `fetchLoginShellEnvVariables(eelDescriptor)` retrieves shell environment variables + // via `com.intellij.util.EnvironmentUtil.getEnvironmentMap`, which can break PATH. + envs.putAll(System.getenv()); } else { - envs.putAll(System.getenv()); + envs.putAll(fetchLoginShellEnvVariables(eelDescriptor)); } EnvironmentRestorer.restoreOverriddenVars(envs); }