| // Copyright 2023 The ChromiumOS Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import * as vscode from 'vscode'; | |
| import * as config from './services/config'; | |
| /** | |
| * Entrypoint for starting migration if the user's environment is not compatible | |
| * with the expectation of the current version of the extension. For example if | |
| * the user contains settings starting from "cros-ide.", the prefix will be | |
| * renamed to "chromiumide.". | |
| * | |
| * This function should be called first when the extension is activated. | |
| */ | |
| export async function migrate(): Promise<void> { | |
| await migrateConfiguration(); | |
| } | |
| async function migrateConfiguration(): Promise<void> { | |
| const configs: config.ConfigValue<unknown>[] = [ | |
| config.board, | |
| config.leagcyBoardsAndPackages.showWelcomeMessage, | |
| config.boilerplate.enabled, | |
| config.boilerplate.guessNamespace, | |
| config.chrome.ashBuildDir, | |
| config.chrome.dutName, | |
| config.chrome.outputDirectories, | |
| config.codeSearch.instance, | |
| config.codeSearch.openWithRevision, | |
| config.gerrit.enabled, | |
| config.ownersFiles.links, | |
| config.platformEc.board, | |
| config.platformEc.mode, | |
| config.platformEc.build, | |
| config.spellchecker, | |
| config.testCoverage.enabled, | |
| config.underDevelopment.chromiumBuild, | |
| config.underDevelopment.platform2GtestDebugging, | |
| config.underDevelopment.platformEc, | |
| config.underDevelopment.relatedFiles, | |
| config.underDevelopment.systemLogViewer, | |
| config.deviceManagement.devices, | |
| config.metrics.collectMetrics, | |
| config.metrics.showMessage, | |
| config.paths.depotTools, | |
| ]; | |
| let shouldMigrate = false; | |
| for (const conf of configs) { | |
| const v = conf.inspectOldConfig(); | |
| if (v === undefined) continue; | |
| if ( | |
| v.globalValue === undefined && | |
| v.workspaceValue === undefined && | |
| v.workspaceFolderValue === undefined | |
| ) { | |
| continue; | |
| } | |
| shouldMigrate = true; | |
| break; | |
| } | |
| if (!shouldMigrate) return; | |
| await vscode.window.withProgress( | |
| { | |
| title: "Migrating IDE config (don't close the window)", | |
| location: vscode.ProgressLocation.Notification, | |
| }, | |
| async (progress, _token) => { | |
| const increment = 100 / configs.length; | |
| for (const conf of configs) { | |
| progress.report({increment}); | |
| const c = conf.inspectOldConfig(); | |
| if (c === undefined) continue; | |
| if (c.globalValue !== undefined) { | |
| await conf.update(c.globalValue, vscode.ConfigurationTarget.Global); | |
| await conf.updateOldConfig( | |
| undefined, | |
| vscode.ConfigurationTarget.Global | |
| ); | |
| } | |
| if (c.workspaceValue !== undefined) { | |
| await conf.update( | |
| c.workspaceValue, | |
| vscode.ConfigurationTarget.Workspace | |
| ); | |
| await conf.updateOldConfig( | |
| undefined, | |
| vscode.ConfigurationTarget.Workspace | |
| ); | |
| } | |
| if (c.workspaceFolderValue !== undefined) { | |
| await conf.update( | |
| c.workspaceFolderValue, | |
| vscode.ConfigurationTarget.WorkspaceFolder | |
| ); | |
| await conf.updateOldConfig( | |
| undefined, | |
| vscode.ConfigurationTarget.WorkspaceFolder | |
| ); | |
| } | |
| } | |
| } | |
| ); | |
| } |