diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 5960da4dc..e9143b129 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -131,6 +131,7 @@ import { ExtensionApp } from "./common/vscode/vscode-app"; import { RepositoriesFilterSortStateWithIds } from "./pure/variant-analysis-filter-sort"; import { DbModule } from "./databases/db-module"; import { redactableError } from "./pure/errors"; +import { QueryHistoryDirs } from "./query-history/query-history-dirs"; /** * extension.ts @@ -649,13 +650,18 @@ async function activateWithInstalledDistribution( ); void extLogger.log("Initializing query history."); + const queryHistoryDirs: QueryHistoryDirs = { + localQueriesDirPath: queryStorageDir, + variantAnalysesDirPath: variantAnalysisStorageDir, + }; + const qhm = new QueryHistoryManager( qs, dbm, localQueryResultsView, variantAnalysisManager, evalLogViewer, - queryStorageDir, + queryHistoryDirs, ctx, queryHistoryConfigurationListener, labelProvider, diff --git a/extensions/ql-vscode/src/query-history/query-history-dirs.ts b/extensions/ql-vscode/src/query-history/query-history-dirs.ts new file mode 100644 index 000000000..46a463d7e --- /dev/null +++ b/extensions/ql-vscode/src/query-history/query-history-dirs.ts @@ -0,0 +1,4 @@ +export interface QueryHistoryDirs { + localQueriesDirPath: string; + variantAnalysesDirPath: string; +} diff --git a/extensions/ql-vscode/src/query-history/query-history-manager.ts b/extensions/ql-vscode/src/query-history/query-history-manager.ts index dda9ad1b2..daffbb9d5 100644 --- a/extensions/ql-vscode/src/query-history/query-history-manager.ts +++ b/extensions/ql-vscode/src/query-history/query-history-manager.ts @@ -65,6 +65,7 @@ import { VariantAnalysisHistoryItem } from "./variant-analysis-history-item"; import { getTotalResultCount } from "../variant-analysis/shared/variant-analysis"; import { HistoryTreeDataProvider } from "./history-tree-data-provider"; import { redactableError } from "../pure/errors"; +import { QueryHistoryDirs } from "./query-history-dirs"; /** * query-history-manager.ts @@ -139,7 +140,7 @@ export class QueryHistoryManager extends DisposableObject { private readonly localQueriesResultsView: ResultsView, private readonly variantAnalysisManager: VariantAnalysisManager, private readonly evalLogViewer: EvalLogViewer, - private readonly queryStorageDir: string, + private readonly queryHistoryDirs: QueryHistoryDirs, ctx: ExtensionContext, private readonly queryHistoryConfigListener: QueryHistoryConfig, private readonly labelProvider: HistoryItemLabelProvider, @@ -389,7 +390,7 @@ export class QueryHistoryManager extends DisposableObject { ONE_HOUR_IN_MS, TWO_HOURS_IN_MS, queryHistoryConfigListener.ttlInMillis, - this.queryStorageDir, + this.queryHistoryDirs, qhm, ctx, ), diff --git a/extensions/ql-vscode/src/query-history/query-history-scrubber.ts b/extensions/ql-vscode/src/query-history/query-history-scrubber.ts index cae683d7b..2d900adb0 100644 --- a/extensions/ql-vscode/src/query-history/query-history-scrubber.ts +++ b/extensions/ql-vscode/src/query-history/query-history-scrubber.ts @@ -3,6 +3,7 @@ import { EOL } from "os"; import { join } from "path"; import { Disposable, ExtensionContext } from "vscode"; import { extLogger } from "../common"; +import { QueryHistoryDirs } from "./query-history-dirs"; import { QueryHistoryManager } from "./query-history-manager"; const LAST_SCRUB_TIME_KEY = "lastScrubTime"; @@ -23,14 +24,14 @@ type Counter = { * @param wakeInterval How often to check to see if the job should run. * @param throttleTime How often to actually run the job. * @param maxQueryTime The maximum age of a query before is ready for deletion. - * @param queryDirectory The directory containing all queries. + * @param queryHistoryDirs The directories containing all query history information. * @param ctx The extension context. */ export function registerQueryHistoryScrubber( wakeInterval: number, throttleTime: number, maxQueryTime: number, - queryDirectory: string, + queryHistoryDirs: QueryHistoryDirs, qhm: QueryHistoryManager, ctx: ExtensionContext, @@ -42,7 +43,7 @@ export function registerQueryHistoryScrubber( wakeInterval, throttleTime, maxQueryTime, - queryDirectory, + queryHistoryDirs, qhm, ctx, counter, @@ -58,7 +59,7 @@ export function registerQueryHistoryScrubber( async function scrubQueries( throttleTime: number, maxQueryTime: number, - queryDirectory: string, + queryHistoryDirs: QueryHistoryDirs, qhm: QueryHistoryManager, ctx: ExtensionContext, counter?: Counter, @@ -75,17 +76,17 @@ async function scrubQueries( try { counter?.increment(); void extLogger.log("Scrubbing query directory. Removing old queries."); - if (!(await pathExists(queryDirectory))) { + if (!(await pathExists(queryHistoryDirs.localQueriesDirPath))) { void extLogger.log( - `Cannot scrub. Query directory does not exist: ${queryDirectory}`, + `Cannot scrub. Query directory does not exist: ${queryHistoryDirs.localQueriesDirPath}`, ); return; } - const baseNames = await readdir(queryDirectory); + const baseNames = await readdir(queryHistoryDirs.localQueriesDirPath); const errors: string[] = []; for (const baseName of baseNames) { - const dir = join(queryDirectory, baseName); + const dir = join(queryHistoryDirs.localQueriesDirPath, baseName); const scrubResult = await scrubDirectory(dir, now, maxQueryTime); if (scrubResult.errorMsg) { errors.push(scrubResult.errorMsg); diff --git a/extensions/ql-vscode/test/factories/query-history/query-history-dirs.ts b/extensions/ql-vscode/test/factories/query-history/query-history-dirs.ts new file mode 100644 index 000000000..02f9cdf79 --- /dev/null +++ b/extensions/ql-vscode/test/factories/query-history/query-history-dirs.ts @@ -0,0 +1,14 @@ +import { QueryHistoryDirs } from "../../../src/query-history/query-history-dirs"; + +export function createMockQueryHistoryDirs({ + localQueriesDirPath = "mock-local-queries-dir-path", + variantAnalysesDirPath = "mock-variant-analyses-dir-path", +}: { + localQueriesDirPath?: string; + variantAnalysesDirPath?: string; +} = {}): QueryHistoryDirs { + return { + localQueriesDirPath, + variantAnalysesDirPath, + }; +} diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts index f5192f98a..b63448a40 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts @@ -26,6 +26,7 @@ import { SortOrder, } from "../../../../src/query-history/history-tree-data-provider"; import { QueryHistoryManager } from "../../../../src/query-history/query-history-manager"; +import { createMockQueryHistoryDirs } from "../../../factories/query-history/query-history-dirs"; describe("HistoryTreeDataProvider", () => { const mockExtensionLocation = join(tmpDir.name, "mock-extension-location"); @@ -425,7 +426,7 @@ describe("HistoryTreeDataProvider", () => { localQueriesResultsViewStub, variantAnalysisManagerStub, {} as EvalLogViewer, - "xxx", + createMockQueryHistoryDirs(), { globalStorageUri: vscode.Uri.file(mockExtensionLocation), extensionPath: vscode.Uri.file("/x/y/z").fsPath, diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts index 0c05339a3..78f52c02f 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts @@ -26,6 +26,7 @@ import { QuickPickItem, TextEditor } from "vscode"; import { WebviewReveal } from "../../../../src/interface-utils"; import * as helpers from "../../../../src/helpers"; import { mockedObject } from "../../utils/mocking.helpers"; +import { createMockQueryHistoryDirs } from "../../../factories/query-history/query-history-dirs"; describe("QueryHistoryManager", () => { const mockExtensionLocation = join(tmpDir.name, "mock-extension-location"); @@ -1150,7 +1151,7 @@ describe("QueryHistoryManager", () => { localQueriesResultsViewStub, variantAnalysisManagerStub, {} as EvalLogViewer, - "xxx", + createMockQueryHistoryDirs(), { globalStorageUri: vscode.Uri.file(mockExtensionLocation), extensionPath: vscode.Uri.file("/x/y/z").fsPath, diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-scrubber.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-scrubber.test.ts index 227ff6eea..427c84de4 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-scrubber.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-scrubber.test.ts @@ -181,7 +181,7 @@ describe("query history scrubber", () => { ONE_HOUR_IN_MS, TWO_HOURS_IN_MS, LESS_THAN_ONE_DAY, - dir, + { localQueriesDirPath: dir, variantAnalysesDirPath: dir }, mockedObject({ removeDeletedQueries: () => { return Promise.resolve(); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts index 9ce8c372f..6441d2fea 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts @@ -20,6 +20,7 @@ import { QueryRunner } from "../../../../src/queryRunner"; import { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager"; import { QueryHistoryManager } from "../../../../src/query-history/query-history-manager"; import { mockedObject } from "../../utils/mocking.helpers"; +import { createMockQueryHistoryDirs } from "../../../factories/query-history/query-history-dirs"; // set a higher timeout since recursive delete may take a while, expecially on Windows. jest.setTimeout(120000); @@ -74,7 +75,7 @@ describe("Variant Analyses and QueryHistoryManager", () => { localQueriesResultsViewStub, variantAnalysisManagerStub, {} as EvalLogViewer, - STORAGE_DIR, + createMockQueryHistoryDirs({ localQueriesDirPath: STORAGE_DIR }), mockedObject({ globalStorageUri: Uri.file(STORAGE_DIR), storageUri: undefined,