diff --git a/src/vs/platform/backup/electron-main/backupMainService.ts b/src/vs/platform/backup/electron-main/backupMainService.ts index 7c45cd84912f1cf60866621a56f21df39eb3b35b..1fdda417f40d9e7c280a04414199cd5002ea471c 100644 --- a/src/vs/platform/backup/electron-main/backupMainService.ts +++ b/src/vs/platform/backup/electron-main/backupMainService.ts @@ -119,12 +119,16 @@ export class BackupMainService implements IBackupMainService { this.validateBackupWorkspaces(backups); } - private validateBackupWorkspaces(backups: IBackupWorkspacesFormat): void { - const staleBackupWorkspaces: { workspaceIdentifier: string; backupPath: string; isEmptyWorkspace: boolean }[] = []; - + protected sanitizeFolderWorkspaces(backups: IBackupWorkspacesFormat): void { // Merge duplicates for folder workspaces, don't worry about cleaning them up as they will // be removed when there are no backups. backups.folderWorkspaces = arrays.distinct(backups.folderWorkspaces.map(w => this.sanitizePath(w))); + } + + private validateBackupWorkspaces(backups: IBackupWorkspacesFormat): void { + const staleBackupWorkspaces: { workspaceIdentifier: string; backupPath: string; isEmptyWorkspace: boolean }[] = []; + + this.sanitizeFolderWorkspaces(backups); backups.folderWorkspaces.forEach(workspacePath => { const backupPath = path.join(this.backupHome, this.getWorkspaceHash(workspacePath)); diff --git a/src/vs/platform/backup/test/electron-main/backupMainService.test.ts b/src/vs/platform/backup/test/electron-main/backupMainService.test.ts index 106b76c24521b025ab705ef0341b7623a9341e91..b9f4f3afbdd1b1c47dc5584061fbbd1b85560840 100644 --- a/src/vs/platform/backup/test/electron-main/backupMainService.test.ts +++ b/src/vs/platform/backup/test/electron-main/backupMainService.test.ts @@ -36,6 +36,10 @@ class TestBackupMainService extends BackupMainService { super.loadSync(); } + public sanitizeFolderWorkspaces(backups: IBackupWorkspacesFormat): void { + super.sanitizeFolderWorkspaces(backups); + } + public toBackupPath(workspacePath: string): string { return path.join(this.backupHome, super.getWorkspaceHash(workspacePath)); } @@ -72,8 +76,6 @@ suite('BackupMainService', () => { test('service validates backup workspaces on startup and cleans up', done => { // 1) backup workspace path does not exist - console.log('fooFile :' + fooFile.fsPath); - console.log('barFile :' + barFile.fsPath); service.registerWindowForBackups(1, false, null, fooFile.fsPath); service.registerWindowForBackups(2, false, null, barFile.fsPath); service.loadSync(); @@ -190,23 +192,26 @@ suite('BackupMainService', () => { service.loadSync(); assert.deepEqual(service.emptyWorkspaceBackupPaths, []); }); + }); + suite('sanitizeFolderWorkspaces', () => { test('should merge same cased paths on Windows and Mac', () => { // Skip test on Linux if (platform.isLinux) { return; } - if (platform.isMacintosh) { - fs.writeFileSync(backupWorkspacesPath, '{"folderWorkspaces":["/foo", "/FOO"]}'); - service.loadSync(); - assert.deepEqual(service.workspaceBackupPaths, ['/foo']); - } + const backups: IBackupWorkspacesFormat = { + folderWorkspaces: platform.isWindows ? ['c:\\foo', 'C:\\FOO', 'c:\\FOO'] : ['/foo', '/FOO'], + emptyWorkspaces: [] + }; + + service.sanitizeFolderWorkspaces(backups); if (platform.isWindows) { - fs.writeFileSync(backupWorkspacesPath, '{"folderWorkspaces":["c:\\foo", "C:\\FOO", "c:\\FOO]}'); - service.loadSync(); - assert.deepEqual(service.workspaceBackupPaths, ['c:\\foo']); + assert.deepEqual(backups.folderWorkspaces, ['c:\\foo']); + } else { + assert.deepEqual(backups.folderWorkspaces, ['/foo']); } }); });