mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
properly pass env vars to new VS Code instance; fixes #76212
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user