diff --git a/src/sql/workbench/contrib/configuration/common/configurationUpgrader.ts b/src/sql/workbench/contrib/configuration/common/configurationUpgrader.ts index da2253409c..26cab5c069 100644 --- a/src/sql/workbench/contrib/configuration/common/configurationUpgrader.ts +++ b/src/sql/workbench/contrib/configuration/common/configurationUpgrader.ts @@ -7,6 +7,8 @@ import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { deepFreeze } from 'vs/base/common/objects'; import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; +import { INotificationService } from 'vs/platform/notification/common/notification'; +import { localize } from 'vs/nls'; const settingsToMove: { [key: string]: string } = deepFreeze({ 'sql.saveAsCsv.includeHeaders': 'queryEditor.results.saveAsCsv.includeHeaders', // June 19, 2020 @@ -36,7 +38,8 @@ export class ConfigurationUpgraderContribution implements IWorkbenchContribution constructor( @IStorageService private readonly storageService: IStorageService, - @IConfigurationService private readonly configurationService: IConfigurationService + @IConfigurationService private readonly configurationService: IConfigurationService, + @INotificationService private readonly notificationService: INotificationService ) { this.globalStorage = JSON.parse(this.storageService.get(ConfigurationUpgraderContribution.STORAGE_KEY, StorageScope.GLOBAL, '{}')); this.workspaceStorage = JSON.parse(this.storageService.get(ConfigurationUpgraderContribution.STORAGE_KEY, StorageScope.WORKSPACE, '{}')); @@ -52,14 +55,14 @@ export class ConfigurationUpgraderContribution implements IWorkbenchContribution const toKey = settingsToMove[key]; const value = this.configurationService.inspect(key); if (this.globalStorage[key] !== true && value.userValue) { - await this.configurationService.updateValue(key, undefined, ConfigurationTarget.USER); // writing undefined will result in the key being deleted await this.configurationService.updateValue(toKey, value.userValue, ConfigurationTarget.USER); // update to new settings key this.globalStorage[key] = true; // don't proccess again + this.notificationService.info(localize('workbench.configuration.upgradeUser', "{0} was replaced with {1} in your user settings.", key, toKey)); } if (this.workspaceStorage[key] !== true && value.workspaceValue) { - await this.configurationService.updateValue(key, undefined, ConfigurationTarget.WORKSPACE); // writing undefined will result in the key being deleted await this.configurationService.updateValue(toKey, value.workspaceValue, ConfigurationTarget.WORKSPACE); // update to new settings key this.workspaceStorage[key] = true; // don't proccess again + this.notificationService.info(localize('workbench.configuration.upgradeWorkspace', "{0} was replaced with {1} in your workspace settings.", key, toKey)); } } } diff --git a/src/sql/workbench/contrib/configuration/test/common/configurationUpgrader.test.ts b/src/sql/workbench/contrib/configuration/test/common/configurationUpgrader.test.ts index 012f23187b..2b8bc877ec 100644 --- a/src/sql/workbench/contrib/configuration/test/common/configurationUpgrader.test.ts +++ b/src/sql/workbench/contrib/configuration/test/common/configurationUpgrader.test.ts @@ -7,39 +7,35 @@ import * as assert from 'assert'; import { ConfigurationUpgraderContribution } from 'sql/workbench/contrib/configuration/common/configurationUpgrader'; import { TestStorageService } from 'vs/workbench/test/common/workbenchTestServices'; import { TestConfigurationService } from 'sql/platform/connection/test/common/testConfigurationService'; +import { TestNotificationService } from 'vs/platform/notification/test/common/testNotificationService'; suite('Configuration Upgrader', () => { test('does upgrade settings in user settings', async () => { const configurationService = new TestConfigurationService({ user: { 'sql': { 'saveAsCsv': { 'includeHeaders': true } } } }); - const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService); + const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService, new TestNotificationService()); await configurationUpgrader.processingPromise; - assert(configurationService.inspect('sql.saveAsCsv.includeHeaders').userValue === undefined); assert(configurationService.inspect('queryEditor.results.saveAsCsv.includeHeaders').userValue === true); }); test('does not change new setting', async () => { const configurationService = new TestConfigurationService({ user: { 'queryEditor': { 'results': { 'saveAsCsv': { 'includeHeaders': true } } } } }); - const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService); + const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService, new TestNotificationService()); await configurationUpgrader.processingPromise; - assert(configurationService.inspect('sql.saveAsCsv.includeHeaders').userValue === undefined); assert(configurationService.inspect('queryEditor.results.saveAsCsv.includeHeaders').userValue === true); }); test('correctly changes multiple settings', async () => { const configurationService = new TestConfigurationService({ user: { 'sql': { 'saveAsCsv': { 'includeHeaders': true }, 'promptToSaveGeneratedFiles': true } } }); - const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService); + const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService, new TestNotificationService()); await configurationUpgrader.processingPromise; - assert(configurationService.inspect('sql.saveAsCsv.includeHeaders').userValue === undefined); assert(configurationService.inspect('queryEditor.results.saveAsCsv.includeHeaders').userValue === true); - assert(configurationService.inspect('sql.promptToSaveGeneratedFiles').userValue === undefined); assert(configurationService.inspect('queryEditor.promptToSaveGeneratedFiles').userValue === true); }); test('does change workspace settings', async () => { const configurationService = new TestConfigurationService({ workspace: { 'sql': { 'saveAsCsv': { 'includeHeaders': true } } } }); - const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService); + const configurationUpgrader = new ConfigurationUpgraderContribution(new TestStorageService(), configurationService, new TestNotificationService()); await configurationUpgrader.processingPromise; - assert(configurationService.inspect('sql.saveAsCsv.includeHeaders').workspaceValue === undefined); assert(configurationService.inspect('queryEditor.results.saveAsCsv.includeHeaders').workspaceValue === true); }); });