From 18beedd45096a5f04c5beffa45031379097e2830 Mon Sep 17 00:00:00 2001 From: Joao Moreno Date: Mon, 8 Aug 2016 16:12:32 +0200 Subject: [PATCH] improve consistency in env sent to renderer procs fixes #10194 --- scripts/code.bat | 1 + scripts/code.sh | 1 + src/vs/base/common/platform.ts | 6 +- src/vs/code/electron-main/main.ts | 39 +-- src/vs/workbench/electron-browser/index.html | 346 ++++++++++--------- src/vs/workbench/electron-browser/main.ts | 6 - 6 files changed, 199 insertions(+), 200 deletions(-) diff --git a/scripts/code.bat b/scripts/code.bat index 5386769edc2..225dd41e443 100644 --- a/scripts/code.bat +++ b/scripts/code.bat @@ -17,6 +17,7 @@ if not exist out node .\node_modules\gulp\bin\gulp.js compile :: Configuration set NODE_ENV=development set VSCODE_DEV=1 +set VSCODE_CLI=1 set ELECTRON_DEFAULT_ERROR_MODE=1 set ELECTRON_ENABLE_LOGGING=1 set ELECTRON_ENABLE_STACK_DUMPING=1 diff --git a/scripts/code.sh b/scripts/code.sh index 3bcf525ba06..c451ee5daae 100755 --- a/scripts/code.sh +++ b/scripts/code.sh @@ -22,6 +22,7 @@ function code() { # Configuration export NODE_ENV=development export VSCODE_DEV=1 + export VSCODE_CLI=1 export ELECTRON_ENABLE_LOGGING=1 export ELECTRON_ENABLE_STACK_DUMPING=1 diff --git a/src/vs/base/common/platform.ts b/src/vs/base/common/platform.ts index 844e2eb8b40..5caa5c8a418 100644 --- a/src/vs/base/common/platform.ts +++ b/src/vs/base/common/platform.ts @@ -44,10 +44,10 @@ if (typeof process === 'object') { _isMacintosh = (process.platform === 'darwin'); _isLinux = (process.platform === 'linux'); _isRootUser = !_isWindows && (process.getuid() === 0); - let vscode_nls_config = process.env['VSCODE_NLS_CONFIG']; - if (vscode_nls_config) { + let rawNlsConfig = process.env['VSCODE_NLS_CONFIG']; + if (rawNlsConfig) { try { - let nlsConfig:NLSConfig = JSON.parse(vscode_nls_config); + let nlsConfig:NLSConfig = JSON.parse(rawNlsConfig); let resolved = nlsConfig.availableLanguages['*']; _locale = nlsConfig.locale; // VSCode's default language is 'en' diff --git a/src/vs/code/electron-main/main.ts b/src/vs/code/electron-main/main.ts index 4f6ce2fad02..421a84f41f3 100644 --- a/src/vs/code/electron-main/main.ts +++ b/src/vs/code/electron-main/main.ts @@ -269,7 +269,7 @@ interface IEnv { [key: string]: string; } -function getUnixUserEnvironment(): TPromise { +function getUnixShellEnvironment(): TPromise { const promise = new TPromise((c, e) => { const runAsNode = process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE']; const noAttach = process.env['ELECTRON_NO_ATTACH_CONSOLE']; @@ -328,20 +328,20 @@ function getUnixUserEnvironment(): TPromise { } /** - * On Unix systems, we might need to get the environment - * from a user's shell. This should only be done when Code - * is not launched from a Terminal. + * We eed to get the environment from a user's shell. + * This should only be done when Code itself is not launched + * from within a shell. */ -function getUserShellEnvironment(): TPromise { - if (platform.isWindows) { - return TPromise.as({}); - } - +function getShellEnvironment(): TPromise { if (process.env['VSCODE_CLI'] === '1') { return TPromise.as({}); } - return getUnixUserEnvironment(); + if (platform.isWindows) { + return TPromise.as({}); + } + + return getUnixShellEnvironment(); } /** @@ -349,32 +349,29 @@ function getUserShellEnvironment(): TPromise { * Such environment needs to be propagated to the renderer/shared * processes. */ -function getUserEnvironment(): TPromise { - return getUserShellEnvironment().then(userShellEnv => { +function getEnvironment(): TPromise { + return getShellEnvironment().then(shellEnv => { return instantiationService.invokeFunction(a => { const envService = a.get(IEnvironmentService); const instanceEnv = { VSCODE_PID: String(process.pid), VSCODE_IPC_HOOK: envService.mainIPCHandle, - VSCODE_SHARED_IPC_HOOK: envService.sharedIPCHandle + VSCODE_SHARED_IPC_HOOK: envService.sharedIPCHandle, + VSCODE_NLS_CONFIG: process.env['VSCODE_NLS_CONFIG'] }; - return assign({}, userShellEnv, instanceEnv); + return assign({}, shellEnv, instanceEnv); }); }); } // On some platforms we need to manually read from the global environment variables // and assign them to the process environment (e.g. when doubleclick app on Mac) -getUserEnvironment().then(userEnv => { - assign(process.env, userEnv); - - // Make sure the NLS Config travels to the rendered process - // See also https://github.com/Microsoft/vscode/issues/4558 - userEnv['VSCODE_NLS_CONFIG'] = process.env['VSCODE_NLS_CONFIG']; +getEnvironment().then(env => { + assign(process.env, env); return instantiationService.invokeFunction(a => a.get(IEnvironmentService).createPaths()) .then(() => instantiationService.invokeFunction(setupIPC)) - .then(ipcServer => instantiationService.invokeFunction(main, ipcServer, userEnv)); + .then(ipcServer => instantiationService.invokeFunction(main, ipcServer, env)); }) .done(null, err => instantiationService.invokeFunction(quit, err)); \ No newline at end of file diff --git a/src/vs/workbench/electron-browser/index.html b/src/vs/workbench/electron-browser/index.html index c1dbac1376e..1f8c1ab6083 100644 --- a/src/vs/workbench/electron-browser/index.html +++ b/src/vs/workbench/electron-browser/index.html @@ -14,215 +14,221 @@ \ No newline at end of file diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index 6492dbcee80..cd033322563 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -12,7 +12,6 @@ import errors = require('vs/base/common/errors'); import platform = require('vs/base/common/platform'); import paths = require('vs/base/common/paths'); import timer = require('vs/base/common/timer'); -import {assign} from 'vs/base/common/objects'; import uri from 'vs/base/common/uri'; import strings = require('vs/base/common/strings'); import {IResourceInput} from 'vs/platform/editor/common/editor'; @@ -20,10 +19,8 @@ import {EventService} from 'vs/platform/event/common/eventService'; import {WorkspaceContextService} from 'vs/workbench/services/workspace/common/contextService'; import {IWorkspace, IConfiguration, IEnvironment} from 'vs/platform/workspace/common/workspace'; import {ConfigurationService} from 'vs/workbench/services/configuration/node/configurationService'; - import path = require('path'); import fs = require('fs'); - import gracefulFs = require('graceful-fs'); gracefulFs.gracefulify(fs); @@ -56,9 +53,6 @@ export interface IMainEnvironment extends IEnvironment { } export function startup(environment: IMainEnvironment, globalSettings: IGlobalSettings): winjs.TPromise { - // Inherit the user environment - assign(process.env, environment.userEnv); - // Shell Configuration let shellConfiguration: IConfiguration = { env: environment