package zielu.gittoolbox.config; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import zielu.gittoolbox.store.WorkspaceStore; class ConfigMigrator { private final Logger log = Logger.getInstance(getClass()); boolean migrate(GitToolBoxConfig2 appConfig) { boolean migrated = migrateAppV1toV2(appConfig); migrated = migrateV2(appConfig) || migrated; return migrated; } boolean migrate(@NotNull Project project, @NotNull GitToolBoxConfigPrj prjConfig, @NotNull GitToolBoxConfig2 appConfig) { boolean migrated = migrateProject(project, prjConfig); migrated = applyConfigOverrides(project, appConfig, prjConfig) || migrated; return migrated; } private boolean migrateAppV1toV2(@NotNull GitToolBoxConfig2 v2) { if (!v2.getPreviousVersionMigrated()) { ConfigMigratorV1toV2 migrator = new ConfigMigratorV1toV2(); migrator.migrate(v2); v2.setPreviousVersionMigrated(true); log.info("V1 config migrated to V2"); return true; } return false; } private boolean migrateV2(@NotNull GitToolBoxConfig2 config) { if (config.getVersion() == 1) { if (!config.getHideInlineBlameWhileDebugging()) { config.setAlwaysShowInlineBlameWhileDebugging(true); } config.setVersion(2); log.info("V2 config migrated to version 2"); return true; } return false; } private boolean migrateProject(@NotNull Project project, @NotNull GitToolBoxConfigPrj config) { WorkspaceStore workspaceStore = WorkspaceStore.getInstance(project); if (workspaceStore.getProjectConfigVersion() == 1) { ConfigForProjectMigrator migrator = new ConfigForProjectMigrator(config); boolean migrated = migrator.migrate(); if (migrated) { log.info("Project config migrated to version 2"); } workspaceStore.setProjectConfigVersion(2); log.info("Project config set at version 2"); return true; } return false; } private boolean applyConfigOverrides(@NotNull Project project, @NotNull GitToolBoxConfig2 appConfig, @NotNull GitToolBoxConfigPrj prjConfig) { if (project.isDefault()) { return false; } ExtrasConfig override = appConfig.getExtrasConfig(); ConfigOverridesMigrator migrator = new ConfigOverridesMigrator(project, override); boolean migrated = migrator.migrate(prjConfig); if (migrated) { log.info("Project overrides applied"); } return migrated; } }