properly pass env vars to new VS Code instance; fixes #76212

This commit is contained in:
Andre Weinand
2019-06-27 12:02:21 +02:00
parent 6ca986fb8b
commit b43174e1b2
7 changed files with 23 additions and 11 deletions
+1 -1
View File
@@ -153,7 +153,7 @@ export interface IWindowsService {
// Global methods
openWindow(windowId: number, uris: IURIToOpen[], options: IOpenSettings): Promise<void>;
openNewWindow(options?: INewWindowOptions): Promise<void>;
openExtensionDevelopmentHostWindow(args: ParsedArgs): Promise<void>;
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void>;
getWindows(): Promise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]>;
getWindowCount(): Promise<number>;
log(severity: string, ...messages: string[]): Promise<void>;
@@ -12,6 +12,7 @@ import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
import { URI } from 'vs/base/common/uri';
import { ParsedArgs } from 'vs/platform/environment/common/environment';
import { IMainProcessService } from 'vs/platform/ipc/electron-browser/mainProcessService';
import { IProcessEnvironment } from 'vs/base/common/platform';
export class WindowsService implements IWindowsService {
@@ -195,8 +196,8 @@ export class WindowsService implements IWindowsService {
return this.channel.call('openNewWindow', options);
}
openExtensionDevelopmentHostWindow(args: ParsedArgs): Promise<void> {
return this.channel.call('openExtensionDevelopmentHostWindow', args);
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
return this.channel.call('openExtensionDevelopmentHostWindow', [args, env]);
}
async getWindows(): Promise<{ id: number; workspace?: IWorkspaceIdentifier; folderUri?: ISingleFolderWorkspaceIdentifier; title: string; filename?: string; }[]> {
@@ -21,7 +21,7 @@ import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platf
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
import { Schemas } from 'vs/base/common/network';
import { mnemonicButtonLabel } from 'vs/base/common/labels';
import { isMacintosh, isLinux } from 'vs/base/common/platform';
import { isMacintosh, isLinux, IProcessEnvironment } from 'vs/base/common/platform';
import { ILogService } from 'vs/platform/log/common/log';
import { ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
@@ -306,13 +306,14 @@ export class WindowsService extends Disposable implements IWindowsService, IURLH
this.windowsMainService.openNewWindow(OpenContext.API, options);
}
async openExtensionDevelopmentHostWindow(args: ParsedArgs): Promise<void> {
async openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
this.logService.trace('windowsService#openExtensionDevelopmentHostWindow ' + JSON.stringify(args));
if (args.extensionDevelopmentPath) {
this.windowsMainService.openExtensionDevelopmentHostWindow(args.extensionDevelopmentPath, {
context: OpenContext.API,
cli: args
cli: args,
userEnv: Object.keys(env).length > 0 ? env : undefined
});
}
}
+1 -1
View File
@@ -102,7 +102,7 @@ export class WindowsChannel implements IServerChannel {
return this.service.openWindow(arg[0], urisToOpen, options);
}
case 'openNewWindow': return this.service.openNewWindow(arg);
case 'openExtensionDevelopmentHostWindow': return this.service.openExtensionDevelopmentHostWindow(arg);
case 'openExtensionDevelopmentHostWindow': return this.service.openExtensionDevelopmentHostWindow(arg[0], arg[1]);
case 'getWindows': return this.service.getWindows();
case 'getWindowCount': return this.service.getWindowCount();
case 'relaunch': return this.service.relaunch(arg[0]);
@@ -52,6 +52,7 @@ import { IFileService } from 'vs/platform/files/common/files';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ParsedArgs } from 'vs/platform/environment/common/environment';
import { ClassifiedEvent, StrictPropertyCheck, GDPRClassification } from 'vs/platform/telemetry/common/gdprTypings';
import { IProcessEnvironment } from 'vs/base/common/platform';
//#region Backup File
@@ -1119,7 +1120,7 @@ export class SimpleWindowsService implements IWindowsService {
return Promise.resolve();
}
openExtensionDevelopmentHostWindow(args: ParsedArgs): Promise<void> {
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
return Promise.resolve();
}
@@ -16,6 +16,7 @@ import { ISignService } from 'vs/platform/sign/common/sign';
import { ParsedArgs } from 'vs/platform/environment/common/environment';
import { IWindowsService } from 'vs/platform/windows/common/windows';
import { URI } from 'vs/base/common/uri';
import { IProcessEnvironment } from 'vs/base/common/platform';
/**
* This interface represents a single command line argument split into a "prefix" and a "path" half.
@@ -606,7 +607,15 @@ export class RawDebugSession {
}
}
return this.windowsService.openExtensionDevelopmentHostWindow(args);
let env: IProcessEnvironment = {};
if (vscodeArgs.env) {
// merge environment variables into a copy of the process.env
env = objects.mixin(objects.mixin(env, process.env), vscodeArgs.env);
// and delete some if necessary
Object.keys(env).filter(k => env[k] === null).forEach(key => delete env[key]);
}
return this.windowsService.openExtensionDevelopmentHostWindow(args, env);
}
private send<R extends DebugProtocol.Response>(command: string, args: any, timeout?: number): Promise<R> {
@@ -71,7 +71,7 @@ import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { ViewletDescriptor, Viewlet } from 'vs/workbench/browser/viewlet';
import { IViewlet } from 'vs/workbench/common/viewlet';
import { IStorageService, InMemoryStorageService } from 'vs/platform/storage/common/storage';
import { isLinux, isMacintosh } from 'vs/base/common/platform';
import { isLinux, isMacintosh, IProcessEnvironment } from 'vs/base/common/platform';
import { LabelService } from 'vs/workbench/services/label/common/labelService';
import { IDimension } from 'vs/platform/layout/browser/layoutService';
import { Part } from 'vs/workbench/browser/part';
@@ -1447,7 +1447,7 @@ export class TestWindowsService implements IWindowsService {
return Promise.resolve();
}
openExtensionDevelopmentHostWindow(args: ParsedArgs): Promise<void> {
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
return Promise.resolve();
}