From 1abe1c7ca031e4b6b670a2c926bbe928e2a918bf Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Fri, 25 Jan 2019 12:52:54 +0100 Subject: [PATCH] delete untitled workspace on enter --- src/vs/code/electron-main/windows.ts | 8 +++++++- src/vs/platform/workspaces/common/workspaces.ts | 4 +--- .../electron-main/workspacesMainService.ts | 8 +------- src/vs/platform/workspaces/node/workspacesIpc.ts | 9 --------- .../electron-main/workspacesMainService.test.ts | 16 ++++++++-------- .../workspace/node/workspaceEditingService.ts | 1 - 6 files changed, 17 insertions(+), 29 deletions(-) diff --git a/src/vs/code/electron-main/windows.ts b/src/vs/code/electron-main/windows.ts index 42656aa18b3..5b0c18ecd87 100644 --- a/src/vs/code/electron-main/windows.ts +++ b/src/vs/code/electron-main/windows.ts @@ -2010,6 +2010,11 @@ class WorkspacesManager { backupPath = this.backupMainService.registerWorkspaceBackupSync(workspace, window.config.backupPath); } + // if the window was opened on an untitled workspace, delete it. + if (window.openedWorkspace && this.workspacesMainService.isUntitledWorkspace(window.openedWorkspace)) { + this.workspacesMainService.deleteUntitledWorkspaceSync(window.openedWorkspace); + } + // Update window configuration properly based on transition to workspace window.config.folderUri = undefined; window.config.workspace = workspace; @@ -2091,8 +2096,9 @@ class WorkspacesManager { defaultPath: this.getUntitledWorkspaceSaveDialogDefaultPath(workspace) }, window).then(target => { if (target) { - return this.workspacesMainService.saveWorkspace(workspace, target).then(savedWorkspace => { + return this.workspacesMainService.saveWorkspaceAs(workspace, target).then(savedWorkspace => { this.historyMainService.addRecentlyOpened([savedWorkspace], []); + this.workspacesMainService.deleteUntitledWorkspaceSync(workspace); return false; }, () => false); diff --git a/src/vs/platform/workspaces/common/workspaces.ts b/src/vs/platform/workspaces/common/workspaces.ts index 0d1c0d017c6..ec81bacefb9 100644 --- a/src/vs/platform/workspaces/common/workspaces.ts +++ b/src/vs/platform/workspaces/common/workspaces.ts @@ -79,7 +79,7 @@ export interface IWorkspacesMainService extends IWorkspacesService { onUntitledWorkspaceDeleted: Event; - saveWorkspace(workspace: IWorkspaceIdentifier, target: string): Promise; + saveWorkspaceAs(workspace: IWorkspaceIdentifier, target: string): Promise; createUntitledWorkspaceSync(folders?: IWorkspaceFolderCreationData[]): IWorkspaceIdentifier; @@ -100,8 +100,6 @@ export interface IWorkspacesService { _serviceBrand: any; createUntitledWorkspace(folders?: IWorkspaceFolderCreationData[]): Promise; - - deleteIfUntitledWorkspace(workspace: IWorkspaceIdentifier): Promise; } export function isSingleFolderWorkspaceIdentifier(obj: any): obj is ISingleFolderWorkspaceIdentifier { diff --git a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts index 9435ca0a714..015156751a9 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts @@ -190,7 +190,7 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain return this.isInsideWorkspacesHome(workspace.configPath); } - saveWorkspace(workspace: IWorkspaceIdentifier, targetConfigPath: string): Promise { + saveWorkspaceAs(workspace: IWorkspaceIdentifier, targetConfigPath: string): Promise { // Return early if target is same as source if (isEqual(workspace.configPath, targetConfigPath, !isLinux)) { @@ -203,7 +203,6 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain const newRawWorkspaceContents = rewriteWorkspaceFileForNewLocation(raw.toString(), URI.file(workspace.configPath), targetConfigPathURI); return writeFile(targetConfigPath, newRawWorkspaceContents).then(() => { - this.deleteUntitledWorkspaceSync(workspace); return this.getWorkspaceIdentifier(targetConfigPathURI); }); }); @@ -221,11 +220,6 @@ export class WorkspacesMainService extends Disposable implements IWorkspacesMain this._onUntitledWorkspaceDeleted.fire(workspace); } - deleteIfUntitledWorkspace(workspace: IWorkspaceIdentifier): Promise { - this.deleteUntitledWorkspaceSync(workspace); - return Promise.resolve(); - } - private doDeleteUntitledWorkspaceSync(configPath: string): void { try { diff --git a/src/vs/platform/workspaces/node/workspacesIpc.ts b/src/vs/platform/workspaces/node/workspacesIpc.ts index e7a44f5bea7..6b44c1dedea 100644 --- a/src/vs/platform/workspaces/node/workspacesIpc.ts +++ b/src/vs/platform/workspaces/node/workspacesIpc.ts @@ -32,11 +32,6 @@ export class WorkspacesChannel implements IServerChannel { return this.service.createUntitledWorkspace(folders); } - case 'deleteIfUntitledWorkspace': { - const rawWorkspace: IWorkspaceIdentifier = arg; - // TODO aeschli: resolve IWorkspaceIdentifier when switching to URI - return this.service.deleteIfUntitledWorkspace(rawWorkspace); - } } throw new Error(`Call not found: ${command}`); @@ -52,8 +47,4 @@ export class WorkspacesChannelClient implements IWorkspacesService { createUntitledWorkspace(folders?: IWorkspaceFolderCreationData[]): Promise { return this.channel.call('createUntitledWorkspace', folders); } - - deleteIfUntitledWorkspace(workspace: IWorkspaceIdentifier): Promise { - return this.channel.call('deleteIfUntitledWorkspace', workspace); - } } 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 b863c62f175..10c01dc60dc 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts @@ -227,7 +227,7 @@ suite('WorkspacesMainService', () => { return createWorkspace([process.cwd(), os.tmpdir(), path.join(os.tmpdir(), 'somefolder')]).then(workspace => { const workspaceConfigPath = path.join(os.tmpdir(), `myworkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); - return service.saveWorkspace(workspace, workspaceConfigPath).then(savedWorkspace => { + return service.saveWorkspaceAs(workspace, workspaceConfigPath).then(savedWorkspace => { assert.ok(savedWorkspace.id); assert.notEqual(savedWorkspace.id, workspace.id); assert.equal(savedWorkspace.configPath, workspaceConfigPath); @@ -250,8 +250,8 @@ suite('WorkspacesMainService', () => { const workspaceConfigPath = path.join(os.tmpdir(), `myworkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); const newWorkspaceConfigPath = path.join(os.tmpdir(), `mySavedWorkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); - return service.saveWorkspace(workspace, workspaceConfigPath).then(savedWorkspace => { - return service.saveWorkspace(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { + return service.saveWorkspaceAs(workspace, workspaceConfigPath).then(savedWorkspace => { + return service.saveWorkspaceAs(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { assert.ok(newSavedWorkspace.id); assert.notEqual(newSavedWorkspace.id, workspace.id); assertPathEquals(newSavedWorkspace.configPath, newWorkspaceConfigPath); @@ -274,11 +274,11 @@ suite('WorkspacesMainService', () => { const workspaceConfigPath = path.join(os.tmpdir(), `myworkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); const newWorkspaceConfigPath = path.join(os.tmpdir(), `mySavedWorkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); - return service.saveWorkspace(workspace, workspaceConfigPath).then(savedWorkspace => { + return service.saveWorkspaceAs(workspace, workspaceConfigPath).then(savedWorkspace => { const contents = fs.readFileSync(savedWorkspace.configPath).toString(); fs.writeFileSync(savedWorkspace.configPath, `// this is a comment\n${contents}`); - return service.saveWorkspace(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { + return service.saveWorkspaceAs(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { assert.ok(newSavedWorkspace.id); assert.notEqual(newSavedWorkspace.id, workspace.id); assertPathEquals(newSavedWorkspace.configPath, newWorkspaceConfigPath); @@ -298,11 +298,11 @@ suite('WorkspacesMainService', () => { const workspaceConfigPath = path.join(os.tmpdir(), `myworkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); const newWorkspaceConfigPath = path.join(os.tmpdir(), `mySavedWorkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); - return service.saveWorkspace(workspace, workspaceConfigPath).then(savedWorkspace => { + return service.saveWorkspaceAs(workspace, workspaceConfigPath).then(savedWorkspace => { const contents = fs.readFileSync(savedWorkspace.configPath).toString(); fs.writeFileSync(savedWorkspace.configPath, contents.replace(/[\\]/g, '/')); // convert backslash to slash - return service.saveWorkspace(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { + return service.saveWorkspaceAs(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { assert.ok(newSavedWorkspace.id); assert.notEqual(newSavedWorkspace.id, workspace.id); assertPathEquals(newSavedWorkspace.configPath, newWorkspaceConfigPath); @@ -331,7 +331,7 @@ suite('WorkspacesMainService', () => { return createWorkspace([process.cwd(), os.tmpdir()]).then(workspace => { const workspaceConfigPath = path.join(os.tmpdir(), `myworkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); - return service.saveWorkspace(workspace, workspaceConfigPath).then(savedWorkspace => { + return service.saveWorkspaceAs(workspace, workspaceConfigPath).then(savedWorkspace => { assert.ok(fs.existsSync(savedWorkspace.configPath)); service.deleteUntitledWorkspaceSync(savedWorkspace); diff --git a/src/vs/workbench/services/workspace/node/workspaceEditingService.ts b/src/vs/workbench/services/workspace/node/workspaceEditingService.ts index 9ac1f58843e..6172c7e23fb 100644 --- a/src/vs/workbench/services/workspace/node/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspace/node/workspaceEditingService.ts @@ -203,7 +203,6 @@ export class WorkspaceEditingService implements IWorkspaceEditingService { const raw = await this.fileSystemService.resolveContent(configPathURI); const newRawWorkspaceContents = rewriteWorkspaceFileForNewLocation(raw.value, configPathURI, targetConfigPathURI); await this.fileSystemService.createFile(targetConfigPathURI, newRawWorkspaceContents, { overwrite: true }); - await this.workspaceService.deleteIfUntitledWorkspace(workspace); } private handleWorkspaceConfigurationEditingError(error: JSONEditingError): Promise {