diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 9077c04405ced09b7a3fe8eeb3f73b7a24e0013b..8c7b5d5abd6386f00f023f4b7b176320160316fb 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -273,7 +273,7 @@ export class WindowsManager implements IWindowsMainService { // Don't Save: delete workspace case ConfirmResult.DONT_SAVE: - this.workspacesService.deleteUntitledWorkspace(workspace); + this.workspacesService.deleteUntitledWorkspaceSync(workspace); e.veto(false); break; @@ -915,7 +915,7 @@ export class WindowsManager implements IWindowsMainService { // Workspace const workspace = this.workspacesService.resolveWorkspaceSync(candidate); if (workspace) { - return { workspace }; + return { workspace: { id: workspace.id, configPath: candidate } }; } // File diff --git a/src/vs/platform/workspaces/common/workspaces.ts b/src/vs/platform/workspaces/common/workspaces.ts index 8e74a9d91fd0a79d7f53debd7dfdc2028cafc8e3..2a3abc9b50c84fd1197c6355eceef4675b538f84 100644 --- a/src/vs/platform/workspaces/common/workspaces.ts +++ b/src/vs/platform/workspaces/common/workspaces.ts @@ -47,10 +47,10 @@ export interface IWorkspacesMainService extends IWorkspacesService { onWorkspaceSaved: Event; onWorkspaceDeleted: Event; - resolveWorkspaceSync(path: string): IWorkspaceIdentifier; + resolveWorkspaceSync(path: string): IStoredWorkspace; isUntitledWorkspace(workspace: IWorkspaceIdentifier): boolean; - deleteUntitledWorkspace(workspace: IWorkspaceIdentifier): void; + deleteUntitledWorkspaceSync(workspace: IWorkspaceIdentifier): void; } export interface IWorkspacesService { diff --git a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts index bed36acec81c686ced25b4809e49275babb2c9d3..e0956c97f7d38d3b2763e75b43cbe3f95c3bcda6 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts @@ -46,7 +46,7 @@ export class WorkspacesMainService implements IWorkspacesMainService { return this._onWorkspaceDeleted.event; } - public resolveWorkspaceSync(path: string): IWorkspaceIdentifier { + public resolveWorkspaceSync(path: string): IStoredWorkspace { const isWorkspace = this.isInsideWorkspacesHome(path) || extname(path) === `.${WORKSPACE_EXTENSION}`; if (!isWorkspace) { return null; // does not look like a valid workspace config file @@ -60,10 +60,7 @@ export class WorkspacesMainService implements IWorkspacesMainService { return null; // looks like an invalid workspace file } - return { - id: workspace.id, - configPath: path - }; + return workspace; } catch (error) { this.logService.log(`${path} cannot be parsed as JSON file (${error}).`); @@ -115,18 +112,19 @@ export class WorkspacesMainService implements IWorkspacesMainService { // Copy to new target return nfcall(copy, workspace.configPath, target).then(() => { const savedWorkspace = this.resolveWorkspaceSync(target); + const savedWorkspaceIdentifier = { id: savedWorkspace.id, configPath: target }; // Event - this._onWorkspaceSaved.fire({ workspace: savedWorkspace, oldConfigPath: workspace.configPath }); + this._onWorkspaceSaved.fire({ workspace: savedWorkspaceIdentifier, oldConfigPath: workspace.configPath }); // Delete untitled workspace - this.deleteUntitledWorkspace(workspace); + this.deleteUntitledWorkspaceSync(workspace); - return savedWorkspace; + return savedWorkspaceIdentifier; }); } - public deleteUntitledWorkspace(workspace: IWorkspaceIdentifier): void { + public deleteUntitledWorkspaceSync(workspace: IWorkspaceIdentifier): void { if (!this.isUntitledWorkspace(workspace)) { return; // only supported for untitled workspaces } diff --git a/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts b/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts index 998ee393089d981ed79022d6bb3e9bf1f9d35f09..2b410c9c5104727e766aae2e0fb6e2b7b2acdae2 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts @@ -30,10 +30,10 @@ suite('WorkspacesMainService', () => { class TestWorkspacesMainService extends WorkspacesMainService { public deleteWorkspaceCall: IWorkspaceIdentifier; - public deleteUntitledWorkspace(workspace: IWorkspaceIdentifier): void { + public deleteUntitledWorkspaceSync(workspace: IWorkspaceIdentifier): void { this.deleteWorkspaceCall = workspace; - super.deleteUntitledWorkspace(workspace); + super.deleteUntitledWorkspaceSync(workspace); } } @@ -83,7 +83,6 @@ suite('WorkspacesMainService', () => { test('resolveWorkspace', done => { return service.createWorkspace([process.cwd(), os.tmpdir()]).then(workspace => { - assert.ok(service.resolveWorkspaceSync(workspace.configPath)); // make it a valid workspace path @@ -92,7 +91,7 @@ suite('WorkspacesMainService', () => { workspace.configPath = newPath; const resolved = service.resolveWorkspaceSync(workspace.configPath); - assert.deepEqual(resolved, { id: workspace.id, configPath: workspace.configPath }); + assert.deepEqual(resolved, { id: workspace.id, folders: [process.cwd(), os.tmpdir()] }); done(); });