From fcc814c0c92b04e566ea32c19047e4b56ccaef0b Mon Sep 17 00:00:00 2001 From: Nora Date: Thu, 3 Nov 2022 14:28:00 +0100 Subject: [PATCH] Call db config and initialize with extension path --- extensions/ql-vscode/src/databases/db-config-store.ts | 11 +++++++++-- extensions/ql-vscode/src/extension.ts | 6 ++++++ .../test/pure-tests/databases/db-config-store.test.ts | 7 ++++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/extensions/ql-vscode/src/databases/db-config-store.ts b/extensions/ql-vscode/src/databases/db-config-store.ts index 2056e0d0c..22440b4a3 100644 --- a/extensions/ql-vscode/src/databases/db-config-store.ts +++ b/extensions/ql-vscode/src/databases/db-config-store.ts @@ -10,8 +10,9 @@ export class DbConfigStore extends DisposableObject { private config: DbConfig; private configWatcher: chokidar.FSWatcher | undefined; - public constructor(workspaceStoragePath: string) { + public constructor(workspaceStoragePath: string, private readonly extensionPath: string) { super(); + this.configPath = path.join(workspaceStoragePath, 'workspace-databases.json'); this.config = this.createEmptyConfig(); @@ -34,7 +35,13 @@ export class DbConfigStore extends DisposableObject { private async loadConfig(): Promise { if (!await fs.pathExists(this.configPath)) { - await fs.writeJSON(this.configPath, this.createEmptyConfig(), { spaces: 2 }); + const schemaPath = path.resolve(this.extensionPath, 'workspace-databases-schema.json'); + await fs.writeJSON(this.configPath, fs.readJson(schemaPath), {}); + const json = { + '$schema': `file://${schemaPath}`, + ...this.createEmptyConfig() + }; + await fs.writeJSON(this.configPath, json, { spaces: 2 }); } await this.readConfig(); diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 455638ef2..1f81e0df7 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -119,6 +119,7 @@ import { createVariantAnalysisContentProvider } from './remote-queries/variant-a import { VSCodeMockGitHubApiServer } from './mocks/vscode-mock-gh-api-server'; import { VariantAnalysisResultsManager } from './remote-queries/variant-analysis-results-manager'; import { initializeDbModule } from './databases/db-module'; +import { DbConfigStore } from './databases/db-config-store'; /** * extension.ts @@ -1225,6 +1226,11 @@ async function activateWithInstalledDistribution( ) ); + const storagePath = ctx.storageUri?.fsPath || ctx.globalStorageUri.fsPath; + const extensionPath = ctx.extensionPath; + const dbConfigStore = new DbConfigStore(storagePath, extensionPath); + await dbConfigStore.initialize(); + await commands.executeCommand('codeQLDatabases.removeOrphanedDatabases'); void logger.log('Reading query history'); diff --git a/extensions/ql-vscode/test/pure-tests/databases/db-config-store.test.ts b/extensions/ql-vscode/test/pure-tests/databases/db-config-store.test.ts index 6a1a38025..58ca225fa 100644 --- a/extensions/ql-vscode/test/pure-tests/databases/db-config-store.test.ts +++ b/extensions/ql-vscode/test/pure-tests/databases/db-config-store.test.ts @@ -6,6 +6,7 @@ import { expect } from 'chai'; describe('db config store', async () => { const tempWorkspaceStoragePath = path.join(__dirname, 'test-workspace'); const testDataStoragePath = path.join(__dirname, 'data'); + const extensionPath = path.join(__dirname, 'data'); beforeEach(async () => { await fs.ensureDir(tempWorkspaceStoragePath); @@ -18,7 +19,7 @@ describe('db config store', async () => { it('should create a new config if one does not exist', async () => { const configPath = path.join(tempWorkspaceStoragePath, 'workspace-databases.json'); - const configStore = new DbConfigStore(tempWorkspaceStoragePath); + const configStore = new DbConfigStore(tempWorkspaceStoragePath, extensionPath); await configStore.initialize(); expect(await fs.pathExists(configPath)).to.be.true; @@ -29,7 +30,7 @@ describe('db config store', async () => { }); it('should load an existing config', async () => { - const configStore = new DbConfigStore(testDataStoragePath); + const configStore = new DbConfigStore(testDataStoragePath, extensionPath); await configStore.initialize(); const config = configStore.getConfig(); @@ -44,7 +45,7 @@ describe('db config store', async () => { }); it('should not allow modification of the config', async () => { - const configStore = new DbConfigStore(testDataStoragePath); + const configStore = new DbConfigStore(testDataStoragePath, extensionPath); await configStore.initialize(); const config = configStore.getConfig();