From a71a6dcaff3219d4e85cf26253331977c15bcb42 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 12 Nov 2021 08:50:57 -0500 Subject: [PATCH] Always override PATH when syncing from shell (#4132) --- src/main/shell-sync.ts | 20 +++++++------------- src/main/utils/shell-env.ts | 12 ++++-------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/src/main/shell-sync.ts b/src/main/shell-sync.ts index d699969224..bb2352e51d 100644 --- a/src/main/shell-sync.ts +++ b/src/main/shell-sync.ts @@ -22,10 +22,8 @@ import { shellEnv } from "./utils/shell-env"; import os from "os"; import { app } from "electron"; - -interface Env { - [key: string]: string; -} +import logger from "./logger"; +import { isSnap } from "../common/vars"; /** * shellSync loads what would have been the environment if this application was @@ -33,12 +31,7 @@ interface Env { * useful on macos where this always needs to be done. */ export async function shellSync() { - const { shell } = os.userInfo(); - let envVars = {}; - - envVars = await shellEnv(shell); - - const env: Env = JSON.parse(JSON.stringify(envVars)); + const env = await shellEnv(os.userInfo().shell); if (!env.LANG) { // the LANG env var expects an underscore instead of electron's dash @@ -47,9 +40,8 @@ export async function shellSync() { env.LANG += ".UTF-8"; } - // Overwrite PATH on darwin - if (process.env.NODE_ENV === "production" && process.platform === "darwin") { - process.env["PATH"] = env.PATH; + if (!isSnap) { + process.env.PATH = env.PATH; } // The spread operator allows joining of objects. The precedence is last to first. @@ -57,4 +49,6 @@ export async function shellSync() { ...env, ...process.env, }; + + logger.debug(`[SHELL-SYNC]: Synced shell env, and updating`, env, process.env); } diff --git a/src/main/utils/shell-env.ts b/src/main/utils/shell-env.ts index eaaaa33a5e..644121c3ac 100644 --- a/src/main/utils/shell-env.ts +++ b/src/main/utils/shell-env.ts @@ -22,9 +22,7 @@ import shellEnvironment from "shell-env"; import logger from "../logger"; -export interface EnvironmentVariables { - readonly [key: string]: string; -} +export type EnvironmentVariables = Record; let shellSyncFailed = false; @@ -40,17 +38,15 @@ let shellSyncFailed = false; * returned if the call fails. */ export async function shellEnv(shell?: string, forceRetry = false) : Promise { - let envVars = {}; - if (forceRetry) { shellSyncFailed = false; } if (!shellSyncFailed) { try { - envVars = await Promise.race([ + return await Promise.race([ shellEnvironment(shell), - new Promise((_resolve, reject) => setTimeout(() => { + new Promise((_resolve, reject) => setTimeout(() => { reject(new Error("Resolving shell environment is taking very long. Please review your shell configuration.")); }, 30_000)), ]); @@ -62,5 +58,5 @@ export async function shellEnv(shell?: string, forceRetry = false) : Promise