mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-17 23:35:54 +01:00
send workspace data to extension host behind a flag (#299179)
This commit is contained in:
committed by
GitHub
parent
34659c0ef1
commit
d724d41456
@@ -15,10 +15,12 @@ import { URI } from '../../../../base/common/uri.js';
|
||||
import { autorun } from '../../../../base/common/observable.js';
|
||||
import { IWorkspaceFolderCreationData } from '../../../../platform/workspaces/common/workspaces.js';
|
||||
import { getGitHubRemoteFileDisplayName } from '../../fileTreeView/browser/githubFileSystemProvider.js';
|
||||
import { Queue } from '../../../../base/common/async.js';
|
||||
|
||||
export class WorkspaceFolderManagementContribution extends Disposable implements IWorkbenchContribution {
|
||||
|
||||
static readonly ID = 'workbench.contrib.workspaceFolderManagement';
|
||||
private queue = this._register(new Queue<void>());
|
||||
|
||||
constructor(
|
||||
@ISessionsManagementService private readonly sessionManagementService: ISessionsManagementService,
|
||||
@@ -30,7 +32,7 @@ export class WorkspaceFolderManagementContribution extends Disposable implements
|
||||
super();
|
||||
this._register(autorun(reader => {
|
||||
const activeSession = this.sessionManagementService.activeSession.read(reader);
|
||||
this.updateWorkspaceFoldersForSession(activeSession);
|
||||
this.queue.queue(() => this.updateWorkspaceFoldersForSession(activeSession));
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import { INativeWorkbenchEnvironmentService, NativeWorkbenchEnvironmentService }
|
||||
import { ServiceCollection } from '../../platform/instantiation/common/serviceCollection.js';
|
||||
import { ILoggerService, ILogService, LogLevel } from '../../platform/log/common/log.js';
|
||||
import { NativeWorkbenchStorageService } from '../../workbench/services/storage/electron-browser/storageService.js';
|
||||
import { IWorkspaceContextService, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IAnyWorkspaceIdentifier, reviveIdentifier } from '../../platform/workspace/common/workspace.js';
|
||||
import { IWorkspaceContextService, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier, IAnyWorkspaceIdentifier, reviveIdentifier, IWorkspaceIdentifier } from '../../platform/workspace/common/workspace.js';
|
||||
import { IWorkbenchConfigurationService } from '../../workbench/services/configuration/common/configuration.js';
|
||||
import { IStorageService } from '../../platform/storage/common/storage.js';
|
||||
import { Disposable } from '../../base/common/lifecycle.js';
|
||||
@@ -67,6 +67,7 @@ import { NativeMenubarControl } from '../../workbench/electron-browser/parts/tit
|
||||
import { IWorkspaceEditingService } from '../../workbench/services/workspaces/common/workspaceEditing.js';
|
||||
import { ConfigurationService } from '../services/configuration/browser/configurationService.js';
|
||||
import { SessionsWorkspaceContextService } from '../services/workspace/browser/workspaceContextService.js';
|
||||
import { getWorkspaceIdentifier } from '../../workbench/services/workspaces/browser/workspaces.js';
|
||||
|
||||
export class SessionsMain extends Disposable {
|
||||
|
||||
@@ -291,21 +292,21 @@ export class SessionsMain extends Disposable {
|
||||
//
|
||||
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
// Workspace
|
||||
const workspaceContextService = new SessionsWorkspaceContextService(uriIdentityService.extUri.joinPath(uriIdentityService.extUri.dirname(userDataProfilesService.profilesHome), 'agent-sessions.code-workspace'), uriIdentityService);
|
||||
serviceCollection.set(IWorkspaceContextService, workspaceContextService);
|
||||
serviceCollection.set(IWorkspaceEditingService, workspaceContextService);
|
||||
const workspaceIdentifier = getWorkspaceIdentifier(uriIdentityService.extUri.joinPath(uriIdentityService.extUri.dirname(userDataProfilesService.profilesHome), 'agent-sessions.code-workspace'));
|
||||
|
||||
const [configurationService, storageService] = await Promise.all([
|
||||
this.createConfigurationService(userDataProfileService, fileService, logService, policyService).then(service => {
|
||||
const [{ configurationService, workspaceContextService }, storageService] = await Promise.all([
|
||||
this.createWorkspaceAndConfigurationService(workspaceIdentifier, userDataProfileService, uriIdentityService, fileService, logService, policyService).then(services => {
|
||||
|
||||
// Configuration
|
||||
serviceCollection.set(IWorkbenchConfigurationService, service);
|
||||
serviceCollection.set(IWorkbenchConfigurationService, services.configurationService);
|
||||
// Workspace
|
||||
serviceCollection.set(IWorkspaceContextService, services.workspaceContextService);
|
||||
serviceCollection.set(IWorkspaceEditingService, services.workspaceContextService);
|
||||
|
||||
return service;
|
||||
return services;
|
||||
}),
|
||||
|
||||
this.createStorageService(workspaceContextService.getWorkspace(), environmentService, userDataProfileService, userDataProfilesService, mainProcessService).then(service => {
|
||||
this.createStorageService(workspaceIdentifier, environmentService, userDataProfileService, userDataProfilesService, mainProcessService).then(service => {
|
||||
|
||||
// Storage
|
||||
serviceCollection.set(IStorageService, service);
|
||||
@@ -343,20 +344,23 @@ export class SessionsMain extends Disposable {
|
||||
return { serviceCollection, logService, storageService, configurationService };
|
||||
}
|
||||
|
||||
private async createConfigurationService(
|
||||
private async createWorkspaceAndConfigurationService(
|
||||
workspaceIdentifier: IWorkspaceIdentifier,
|
||||
userDataProfileService: IUserDataProfileService,
|
||||
uriIdentityService: IUriIdentityService,
|
||||
fileService: FileService,
|
||||
logService: ILogService,
|
||||
policyService: IPolicyService
|
||||
): Promise<ConfigurationService> {
|
||||
): Promise<{ configurationService: ConfigurationService; workspaceContextService: SessionsWorkspaceContextService }> {
|
||||
const configurationService = new ConfigurationService(userDataProfileService.currentProfile.settingsResource, fileService, policyService, logService);
|
||||
try {
|
||||
await configurationService.initialize();
|
||||
return configurationService;
|
||||
} catch (error) {
|
||||
onUnexpectedError(error);
|
||||
return configurationService;
|
||||
}
|
||||
|
||||
const workspaceContextService = new SessionsWorkspaceContextService(workspaceIdentifier, uriIdentityService, configurationService);
|
||||
return { configurationService, workspaceContextService };
|
||||
}
|
||||
|
||||
private async createStorageService(workspace: IAnyWorkspaceIdentifier, environmentService: INativeWorkbenchEnvironmentService, userDataProfileService: IUserDataProfileService, userDataProfilesService: IUserDataProfilesService, mainProcessService: IMainProcessService): Promise<NativeWorkbenchStorageService> {
|
||||
|
||||
@@ -11,8 +11,9 @@ import { IUriIdentityService } from '../../../../platform/uriIdentity/common/uri
|
||||
import { Workspace, WorkspaceFolder, IWorkspace, IWorkspaceContextService, IWorkspaceFoldersChangeEvent, IWorkspaceFoldersWillChangeEvent, IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, IWorkspaceFolder, WorkbenchState } from '../../../../platform/workspace/common/workspace.js';
|
||||
import { IWorkspaceFolderCreationData } from '../../../../platform/workspaces/common/workspaces.js';
|
||||
import { getWorkspaceIdentifier } from '../../../../workbench/services/workspaces/browser/workspaces.js';
|
||||
import { IDidEnterWorkspaceEvent, IWorkspaceEditingService } from '../../../../workbench/services/workspaces/common/workspaceEditing.js';
|
||||
import { IWorkspaceEditingService } from '../../../../workbench/services/workspaces/common/workspaceEditing.js';
|
||||
import { Disposable } from '../../../../base/common/lifecycle.js';
|
||||
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
|
||||
|
||||
export class SessionsWorkspaceContextService extends Disposable implements IWorkspaceContextService, IWorkspaceEditingService {
|
||||
|
||||
@@ -20,7 +21,7 @@ export class SessionsWorkspaceContextService extends Disposable implements IWork
|
||||
|
||||
readonly onDidChangeWorkbenchState = Event.None;
|
||||
readonly onDidChangeWorkspaceName = Event.None;
|
||||
readonly onDidEnterWorkspace = Event.None as Event<IDidEnterWorkspaceEvent>;
|
||||
readonly onDidEnterWorkspace = Event.None;
|
||||
|
||||
private readonly _onWillChangeWorkspaceFolders = new Emitter<IWorkspaceFoldersWillChangeEvent>();
|
||||
readonly onWillChangeWorkspaceFolders = this._onWillChangeWorkspaceFolders.event;
|
||||
@@ -32,11 +33,11 @@ export class SessionsWorkspaceContextService extends Disposable implements IWork
|
||||
private readonly _updateFoldersQueue = this._register(new Queue<void>());
|
||||
|
||||
constructor(
|
||||
sessionsWorkspaceUri: URI,
|
||||
private readonly uriIdentityService: IUriIdentityService
|
||||
workspaceIdentifier: IWorkspaceIdentifier,
|
||||
private readonly uriIdentityService: IUriIdentityService,
|
||||
private readonly configurationService: IConfigurationService,
|
||||
) {
|
||||
super();
|
||||
const workspaceIdentifier = getWorkspaceIdentifier(sessionsWorkspaceUri);
|
||||
this.workspace = new Workspace(workspaceIdentifier.id, [], false, workspaceIdentifier.configPath, uri => uriIdentityService.extUri.ignorePathCasing(uri));
|
||||
}
|
||||
|
||||
@@ -53,7 +54,7 @@ export class SessionsWorkspaceContextService extends Disposable implements IWork
|
||||
}
|
||||
|
||||
hasWorkspaceData(): boolean {
|
||||
return false;
|
||||
return this.configurationService.getValue('sessions.workspace.sendWorkspaceDataToExtHost') === true;
|
||||
}
|
||||
|
||||
getWorkspaceFolder(resource: URI): IWorkspaceFolder | null {
|
||||
|
||||
Reference in New Issue
Block a user