Skip to content

Commit 572ba29

Browse files
authored
Merge pull request #1838 from github/charis-nora/run-mrva-against-selected-db
Use currently selected remote DB when Variant Analysis is run
2 parents d97eb2e + 323862a commit 572ba29

File tree

7 files changed

+391
-249
lines changed

7 files changed

+391
-249
lines changed

extensions/ql-vscode/src/databases/db-module.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ import { DbPanel } from "./ui/db-panel";
99
import { DbSelectionDecorationProvider } from "./ui/db-selection-decoration-provider";
1010

1111
export class DbModule extends DisposableObject {
12+
public readonly dbManager: DbManager;
13+
private readonly dbConfigStore: DbConfigStore;
14+
15+
constructor(app: App) {
16+
super();
17+
18+
this.dbConfigStore = new DbConfigStore(app);
19+
this.dbManager = new DbManager(app, this.dbConfigStore);
20+
}
21+
1222
public async initialize(app: App): Promise<void> {
1323
if (
1424
app.mode !== AppMode.Development ||
@@ -23,15 +33,13 @@ export class DbModule extends DisposableObject {
2333

2434
void extLogger.log("Initializing database module");
2535

26-
const dbConfigStore = new DbConfigStore(app);
27-
await dbConfigStore.initialize();
36+
await this.dbConfigStore.initialize();
2837

29-
const dbManager = new DbManager(app, dbConfigStore);
30-
const dbPanel = new DbPanel(dbManager);
38+
const dbPanel = new DbPanel(this.dbManager);
3139
await dbPanel.initialize();
3240

3341
this.push(dbPanel);
34-
this.push(dbConfigStore);
42+
this.push(this.dbConfigStore);
3543

3644
const dbSelectionDecorationProvider = new DbSelectionDecorationProvider();
3745

@@ -40,7 +48,7 @@ export class DbModule extends DisposableObject {
4048
}
4149

4250
export async function initializeDbModule(app: App): Promise<DbModule> {
43-
const dbModule = new DbModule();
51+
const dbModule = new DbModule(app);
4452
await dbModule.initialize(app);
4553
return dbModule;
4654
}

extensions/ql-vscode/src/extension.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,11 @@ async function activateWithInstalledDistribution(
622622
ctx.subscriptions.push(localQueryResultsView);
623623

624624
void extLogger.log("Initializing variant analysis manager.");
625+
626+
const app = new ExtensionApp(ctx);
627+
const dbModule = await initializeDbModule(app);
628+
ctx.subscriptions.push(dbModule);
629+
625630
const variantAnalysisStorageDir = join(
626631
ctx.globalStorageUri.fsPath,
627632
"variant-analyses",
@@ -636,6 +641,7 @@ async function activateWithInstalledDistribution(
636641
cliServer,
637642
variantAnalysisStorageDir,
638643
variantAnalysisResultsManager,
644+
dbModule.dbManager,
639645
);
640646
ctx.subscriptions.push(variantAnalysisManager);
641647
ctx.subscriptions.push(variantAnalysisResultsManager);
@@ -1580,10 +1586,6 @@ async function activateWithInstalledDistribution(
15801586
void extLogger.log("Reading query history");
15811587
await qhm.readQueryHistory();
15821588

1583-
const app = new ExtensionApp(ctx);
1584-
const dbModule = await initializeDbModule(app);
1585-
ctx.subscriptions.push(dbModule);
1586-
15871589
void extLogger.log("Successfully finished extension initialization.");
15881590

15891591
return {

extensions/ql-vscode/src/remote-queries/repository-selection.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@ import { extLogger } from "../common";
44
import {
55
getRemoteRepositoryLists,
66
getRemoteRepositoryListsPath,
7+
isNewQueryRunExperienceEnabled,
78
} from "../config";
89
import { OWNER_REGEX, REPO_REGEX } from "../pure/helpers-pure";
910
import { UserCancellationException } from "../commandRunner";
11+
import { DbManager } from "../databases/db-manager";
12+
import { DbItemKind } from "../databases/db-item";
1013

1114
export interface RepositorySelection {
1215
repositories?: string[];
@@ -30,7 +33,33 @@ interface RepoList {
3033
* Gets the repositories or repository lists to run the query against.
3134
* @returns The user selection.
3235
*/
33-
export async function getRepositorySelection(): Promise<RepositorySelection> {
36+
export async function getRepositorySelection(
37+
dbManager?: DbManager,
38+
): Promise<RepositorySelection> {
39+
if (isNewQueryRunExperienceEnabled()) {
40+
const selectedDbItem = dbManager?.getSelectedDbItem();
41+
if (selectedDbItem) {
42+
switch (selectedDbItem.kind) {
43+
case DbItemKind.LocalDatabase || DbItemKind.LocalList:
44+
throw new Error("Local databases and lists are not supported yet.");
45+
case DbItemKind.RemoteSystemDefinedList:
46+
return { repositoryLists: [selectedDbItem.listName] };
47+
case DbItemKind.RemoteUserDefinedList:
48+
return {
49+
repositories: selectedDbItem.repos.map((repo) => repo.repoFullName),
50+
};
51+
case DbItemKind.RemoteOwner:
52+
return { owners: [selectedDbItem.ownerName] };
53+
case DbItemKind.RemoteRepo:
54+
return { repositories: [selectedDbItem.repoFullName] };
55+
}
56+
} else {
57+
throw new Error(
58+
"Please select a remote database to run the query against.",
59+
);
60+
}
61+
}
62+
3463
const quickPickItems = [
3564
createCustomRepoQuickPickItem(),
3665
createAllReposOfOwnerQuickPickItem(),

extensions/ql-vscode/src/remote-queries/run-remote-query.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
RepositorySelection,
3030
} from "./repository-selection";
3131
import { Repository } from "./shared/repository";
32+
import { DbManager } from "../databases/db-manager";
3233

3334
export interface QlPack {
3435
name: string;
@@ -213,6 +214,7 @@ export async function prepareRemoteQueryRun(
213214
uri: Uri | undefined,
214215
progress: ProgressCallback,
215216
token: CancellationToken,
217+
dbManager?: DbManager, // the dbManager is only needed when the newQueryRunExperience is enabled
216218
): Promise<PreparedRemoteQuery> {
217219
if (!(await cliServer.cliConstraints.supportsRemoteQueries())) {
218220
throw new Error(
@@ -232,7 +234,7 @@ export async function prepareRemoteQueryRun(
232234
message: "Determining query target language",
233235
});
234236

235-
const repoSelection = await getRepositorySelection();
237+
const repoSelection = await getRepositorySelection(dbManager);
236238
if (!isValidSelection(repoSelection)) {
237239
throw new UserCancellationException("No repositories to query.");
238240
}

extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import {
5959
RepositoriesFilterSortStateWithIds,
6060
} from "../pure/variant-analysis-filter-sort";
6161
import { URLSearchParams } from "url";
62+
import { DbManager } from "../databases/db-manager";
6263

6364
export class VariantAnalysisManager
6465
extends DisposableObject
@@ -100,6 +101,7 @@ export class VariantAnalysisManager
100101
private readonly cliServer: CodeQLCliServer,
101102
private readonly storagePath: string,
102103
private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager,
104+
private readonly dbManager: DbManager,
103105
) {
104106
super();
105107
this.variantAnalysisMonitor = this.push(
@@ -140,6 +142,7 @@ export class VariantAnalysisManager
140142
uri,
141143
progress,
142144
token,
145+
this.dbManager,
143146
);
144147

145148
const queryName = getQueryName(queryMetadata, queryFile);

extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import {
5656
defaultFilterSortState,
5757
SortKey,
5858
} from "../../../pure/variant-analysis-filter-sort";
59+
import { DbManager } from "../../../databases/db-manager";
5960

6061
// up to 3 minutes per test
6162
jest.setTimeout(3 * 60 * 1000);
@@ -69,6 +70,7 @@ describe("Variant Analysis Manager", () => {
6970
let cancellationTokenSource: CancellationTokenSource;
7071
let variantAnalysisManager: VariantAnalysisManager;
7172
let variantAnalysisResultsManager: VariantAnalysisResultsManager;
73+
let dbManager: DbManager;
7274
let variantAnalysis: VariantAnalysis;
7375
let scannedRepos: VariantAnalysisScannedRepository[];
7476

@@ -107,6 +109,7 @@ describe("Variant Analysis Manager", () => {
107109
cli,
108110
storagePath,
109111
variantAnalysisResultsManager,
112+
dbManager,
110113
);
111114
});
112115

0 commit comments

Comments
 (0)