From 302091f2c514947c9f9311bfbb56b3f2abfe5235 Mon Sep 17 00:00:00 2001 From: Charis Kyriakou Date: Thu, 2 Feb 2023 11:50:16 +0000 Subject: [PATCH] Added version to db config (#2029) --- extensions/ql-vscode/databases-schema.json | 5 ++++- .../ql-vscode/src/databases/config/db-config-store.ts | 2 ++ extensions/ql-vscode/src/databases/config/db-config.ts | 7 ++++++- extensions/ql-vscode/test/factories/db-config-factories.ts | 2 ++ .../test/unit-tests/databases/config/data/databases.json | 1 + .../databases/config/data/without-selected/databases.json | 1 + .../databases/config/db-config-validator.test.ts | 6 +++++- .../ql-vscode/test/unit-tests/databases/db-manager.test.ts | 5 +++++ 8 files changed, 26 insertions(+), 3 deletions(-) diff --git a/extensions/ql-vscode/databases-schema.json b/extensions/ql-vscode/databases-schema.json index 973c20200..f4fa37b55 100644 --- a/extensions/ql-vscode/databases-schema.json +++ b/extensions/ql-vscode/databases-schema.json @@ -4,6 +4,9 @@ "$schema": { "type": "string" }, + "version": { + "type": "integer" + }, "databases": { "type": "object", "properties": { @@ -119,6 +122,6 @@ ] } }, - "required": ["databases"], + "required": ["databases", "version"], "additionalProperties": false } diff --git a/extensions/ql-vscode/src/databases/config/db-config-store.ts b/extensions/ql-vscode/src/databases/config/db-config-store.ts index 4185b0b1e..5507402ae 100644 --- a/extensions/ql-vscode/src/databases/config/db-config-store.ts +++ b/extensions/ql-vscode/src/databases/config/db-config-store.ts @@ -14,6 +14,7 @@ import { renameLocalList, renameRemoteList, SelectedDbItem, + DB_CONFIG_VERSION, } from "./db-config"; import * as chokidar from "chokidar"; import { DisposableObject, DisposeHandler } from "../../pure/disposable-object"; @@ -459,6 +460,7 @@ export class DbConfigStore extends DisposableObject { private createEmptyConfig(): DbConfig { return { + version: DB_CONFIG_VERSION, databases: { variantAnalysis: { repositoryLists: [], diff --git a/extensions/ql-vscode/src/databases/config/db-config.ts b/extensions/ql-vscode/src/databases/config/db-config.ts index 673a753ca..51566f50a 100644 --- a/extensions/ql-vscode/src/databases/config/db-config.ts +++ b/extensions/ql-vscode/src/databases/config/db-config.ts @@ -1,6 +1,10 @@ -// Contains models for the data we want to store in the database config +// Contains models and consts for the data we want to store in the database config. +// Changes to these models should be done carefully and account for backwards compatibility of data. + +export const DB_CONFIG_VERSION = 1; export interface DbConfig { + version: number; databases: DbConfigDatabases; selected?: SelectedDbItem; } @@ -89,6 +93,7 @@ export interface LocalDatabase { export function cloneDbConfig(config: DbConfig): DbConfig { return { + version: config.version, databases: { variantAnalysis: { repositoryLists: config.databases.variantAnalysis.repositoryLists.map( diff --git a/extensions/ql-vscode/test/factories/db-config-factories.ts b/extensions/ql-vscode/test/factories/db-config-factories.ts index 618742de0..92f51c366 100644 --- a/extensions/ql-vscode/test/factories/db-config-factories.ts +++ b/extensions/ql-vscode/test/factories/db-config-factories.ts @@ -5,6 +5,7 @@ import { LocalList, RemoteRepositoryList, SelectedDbItem, + DB_CONFIG_VERSION, } from "../../src/databases/config/db-config"; export function createDbConfig({ @@ -23,6 +24,7 @@ export function createDbConfig({ selected?: SelectedDbItem; } = {}): DbConfig { return { + version: DB_CONFIG_VERSION, databases: { variantAnalysis: { repositoryLists: remoteLists, diff --git a/extensions/ql-vscode/test/unit-tests/databases/config/data/databases.json b/extensions/ql-vscode/test/unit-tests/databases/config/data/databases.json index af6394b60..19603f2d9 100644 --- a/extensions/ql-vscode/test/unit-tests/databases/config/data/databases.json +++ b/extensions/ql-vscode/test/unit-tests/databases/config/data/databases.json @@ -1,4 +1,5 @@ { + "version": 1, "databases": { "variantAnalysis": { "repositoryLists": [ diff --git a/extensions/ql-vscode/test/unit-tests/databases/config/data/without-selected/databases.json b/extensions/ql-vscode/test/unit-tests/databases/config/data/without-selected/databases.json index 9fa672f29..d19d553ea 100644 --- a/extensions/ql-vscode/test/unit-tests/databases/config/data/without-selected/databases.json +++ b/extensions/ql-vscode/test/unit-tests/databases/config/data/without-selected/databases.json @@ -1,4 +1,5 @@ { + "version": 1, "databases": { "variantAnalysis": { "repositoryLists": [], diff --git a/extensions/ql-vscode/test/unit-tests/databases/config/db-config-validator.test.ts b/extensions/ql-vscode/test/unit-tests/databases/config/db-config-validator.test.ts index c87fed79d..3470f2cc7 100644 --- a/extensions/ql-vscode/test/unit-tests/databases/config/db-config-validator.test.ts +++ b/extensions/ql-vscode/test/unit-tests/databases/config/db-config-validator.test.ts @@ -1,5 +1,8 @@ import { join } from "path"; -import { DbConfig } from "../../../../src/databases/config/db-config"; +import { + DbConfig, + DB_CONFIG_VERSION, +} from "../../../../src/databases/config/db-config"; import { DbConfigValidator } from "../../../../src/databases/config/db-config-validator"; import { DbConfigValidationErrorKind } from "../../../../src/databases/db-validation-errors"; import { @@ -15,6 +18,7 @@ describe("db config validation", () => { // We're intentionally bypassing the type check because we'd // like to make sure validation errors are highlighted. const dbConfig = { + version: DB_CONFIG_VERSION, databases: { variantAnalysis: { repositoryLists: [ diff --git a/extensions/ql-vscode/test/unit-tests/databases/db-manager.test.ts b/extensions/ql-vscode/test/unit-tests/databases/db-manager.test.ts index a32ee2d5c..fa49ce2f9 100644 --- a/extensions/ql-vscode/test/unit-tests/databases/db-manager.test.ts +++ b/extensions/ql-vscode/test/unit-tests/databases/db-manager.test.ts @@ -413,6 +413,7 @@ describe("db manager", () => { const dbConfigFileContents = await readDbConfigDirectly(); expect(dbConfigFileContents).toEqual({ + version: dbConfig.version, databases: { variantAnalysis: { repositoryLists: [], @@ -434,6 +435,7 @@ describe("db manager", () => { const dbConfigFileContents = await readDbConfigDirectly(); expect(dbConfigFileContents).toEqual({ + version: dbConfig.version, databases: { variantAnalysis: { repositoryLists: [remoteList], @@ -459,6 +461,7 @@ describe("db manager", () => { const dbConfigFileContents = await readDbConfigDirectly(); expect(dbConfigFileContents).toEqual({ + version: dbConfig.version, databases: { variantAnalysis: { repositoryLists: [remoteList], @@ -484,6 +487,7 @@ describe("db manager", () => { const dbConfigFileContents = await readDbConfigDirectly(); expect(dbConfigFileContents).toEqual({ + version: dbConfig.version, databases: { variantAnalysis: { repositoryLists: [remoteList], @@ -513,6 +517,7 @@ describe("db manager", () => { const dbConfigFileContents = await readDbConfigDirectly(); expect(dbConfigFileContents).toEqual({ + version: dbConfig.version, databases: { variantAnalysis: { repositoryLists: [remoteList],