From 00262fb3900881a65fe30b2771ba8e58cf4a9b09 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 14 Feb 2018 18:37:01 +0100 Subject: [PATCH] Fix #41571 --- .../services/configuration/node/configuration.ts | 6 ++++-- .../test/node/configurationService.test.ts | 13 +++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/services/configuration/node/configuration.ts b/src/vs/workbench/services/configuration/node/configuration.ts index 897e2c0faac64..8c8a734940644 100644 --- a/src/vs/workbench/services/configuration/node/configuration.ts +++ b/src/vs/workbench/services/configuration/node/configuration.ts @@ -92,10 +92,13 @@ export class WorkspaceConfiguration extends Disposable { this._workspaceConfigPath = workspaceConfigPath; - this.stopListeningToWatcher(); return new TPromise((c, e) => { const defaultConfig = new WorkspaceConfigurationModelParser(this._workspaceConfigPath.fsPath); defaultConfig.parse(JSON.stringify({ folders: [] } as IStoredWorkspace, null, '\t')); + if (this._workspaceConfigurationWatcher) { + this.stopListeningToWatcher(); + this._workspaceConfigurationWatcher.dispose(); + } this._workspaceConfigurationWatcher = new ConfigWatcher(this._workspaceConfigPath.fsPath, { changeBufferDelay: 300, onError: error => errors.onUnexpectedError(error), @@ -144,7 +147,6 @@ export class WorkspaceConfiguration extends Disposable { } private listenToWatcher() { - this._workspaceConfigurationWatcherDisposables.push(this._workspaceConfigurationWatcher); this._workspaceConfigurationWatcher.onDidUpdateConfiguration(() => this._onDidUpdateConfiguration.fire(), this, this._workspaceConfigurationWatcherDisposables); } diff --git a/src/vs/workbench/services/configuration/test/node/configurationService.test.ts b/src/vs/workbench/services/configuration/test/node/configurationService.test.ts index c7ca291a460a9..bf72634738bfe 100644 --- a/src/vs/workbench/services/configuration/test/node/configurationService.test.ts +++ b/src/vs/workbench/services/configuration/test/node/configurationService.test.ts @@ -274,6 +274,19 @@ suite('WorkspaceContextService - Workspace', () => { }); }); + test('remove folders and add them back by writing into the file', done => { + const folders = testObject.getWorkspace().folders; + return testObject.removeFolders([folders[0].uri]) + .then(() => { + testObject.onDidChangeWorkspaceFolders(actual => { + assert.deepEqual(actual.added.map(r => r.uri.toString()), [folders[0].uri.toString()]); + done(); + }); + const workspace = { folders: [{ path: folders[0].uri.fsPath }, { path: folders[1].uri.fsPath }] }; + fs.writeFileSync(testObject.getWorkspace().configuration.fsPath, JSON.stringify(workspace, null, '\t')); + }); + }); + test('update folders (remove last and add to end)', () => { const target = sinon.spy(); testObject.onDidChangeWorkspaceFolders(target);