Skip to content

Commit 259159d

Browse files
committed
Add missing pack download and fix lock file creation.
1 parent d2eb366 commit 259159d

8 files changed

Lines changed: 32 additions & 23 deletions

File tree

extensions/ql-vscode/src/data-extensions-editor/auto-model-codeml-queries.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export async function runAutoModelQueries({
8484
extensionPacks,
8585
progress,
8686
token: cancellationTokenSource.token,
87+
createLockFile: false,
8788
});
8889

8990
if (!completedQuery) {

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-module.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,10 @@ export class DataExtensionsEditorModule extends DisposableObject {
134134

135135
// Create new temporary directory for query files and pack dependencies
136136
const queryDir = (await dir({ unsafeCleanup: true })).path;
137-
const success = await setUpPack(queryDir, language);
137+
const success = await setUpPack(this.cliServer, queryDir, language);
138138
if (!success) {
139139
return;
140140
}
141-
await this.cliServer.packInstall(queryDir);
142141

143142
const view = new DataExtensionsEditorView(
144143
this.ctx,

extensions/ql-vscode/src/data-extensions-editor/data-extensions-editor-queries.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { QueryLanguage } from "../common/query-language";
33
import { writeFile } from "fs-extra";
44
import { dump } from "js-yaml";
55
import { prepareExternalApiQuery } from "./external-api-usage-queries";
6+
import { CodeQLCliServer } from "../codeql-cli/cli";
67

78
/**
89
* setUpPack sets up a directory to use for the data extension editor queries.
@@ -11,6 +12,7 @@ import { prepareExternalApiQuery } from "./external-api-usage-queries";
1112
* @returns true if the setup was successful, false otherwise.
1213
*/
1314
export async function setUpPack(
15+
cliServer: CodeQLCliServer,
1416
queryDir: string,
1517
language: QueryLanguage,
1618
): Promise<boolean> {
@@ -23,7 +25,7 @@ export async function setUpPack(
2325
return false;
2426
}
2527

26-
// Set up a synthetic query pack to resolve dependencies.
28+
// Set up a synthetic pack so that the query can be resolved later.
2729
const syntheticQueryPack = {
2830
name: "codeql/external-api-usage",
2931
version: "0.0.0",
@@ -34,5 +36,10 @@ export async function setUpPack(
3436

3537
const qlpackFile = join(queryDir, "codeql-pack.yml");
3638
await writeFile(qlpackFile, dump(syntheticQueryPack), "utf8");
39+
await cliServer.packInstall(queryDir);
40+
41+
// Install the other needed query packs
42+
await cliServer.packDownload([`codeql/${language}-queries`]);
43+
3744
return true;
3845
}

extensions/ql-vscode/src/data-extensions-editor/external-api-usage-queries.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ export async function runExternalApiQueries(
9494
extensionPacks,
9595
progress,
9696
token,
97+
// We need to create a lock file, becuase the query is inside our own pack
98+
createLockFile: true,
9799
});
98100

99101
if (!completedQuery) {

extensions/ql-vscode/src/data-extensions-editor/flow-model-queries.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ async function runSingleFlowQuery(
134134
maxStep: 4000,
135135
}),
136136
token,
137+
createLockFile: false,
137138
});
138139

139140
if (!completedQuery) {

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ type RunQueryOptions = {
2121
extensionPacks: string[] | undefined;
2222
progress: ProgressCallback;
2323
token: CancellationToken;
24+
createLockFile: boolean;
2425
};
2526

2627
export async function runQuery({
@@ -33,12 +34,17 @@ export async function runQuery({
3334
extensionPacks,
3435
progress,
3536
token,
37+
createLockFile,
3638
}: RunQueryOptions): Promise<CoreCompletedQuery | undefined> {
37-
// Create a lock file for the query. This is required to resolve dependencies and library path for the query.
38-
const { cleanup: cleanupLockFile } = await createLockFileForStandardQuery(
39-
cliServer,
40-
queryPath,
41-
);
39+
let cleanupLockFile: (() => Promise<void>) | undefined = undefined;
40+
if (createLockFile) {
41+
// Create a lock file for the query. This is required to resolve dependencies and library path for the query.
42+
const { cleanup } = await createLockFileForStandardQuery(
43+
cliServer,
44+
queryPath,
45+
);
46+
cleanupLockFile = cleanup;
47+
}
4248

4349
// Create a query run to execute
4450
const queryRun = queryRunner.createQueryRun(

extensions/ql-vscode/test/vscode-tests/no-workspace/data-extensions-editor/auto-model-codeml-queries.test.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { mockedObject, mockedUri } from "../../utils/mocking.helpers";
1414
import { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
1515
import { QueryRunner } from "../../../../src/query-server";
1616
import * as queryResolver from "../../../../src/local-queries/query-resolver";
17-
import * as standardQueries from "../../../../src/local-queries/standard-queries";
1817
import { MethodSignature } from "../../../../src/data-extensions-editor/external-api-usage";
1918
import { join } from "path";
2019
import { exists, readFile } from "fs-extra";
@@ -26,10 +25,6 @@ describe("runAutoModelQueries", () => {
2625
let resolveQueriesSpy: jest.SpiedFunction<
2726
typeof queryResolver.resolveQueries
2827
>;
29-
let createLockFileForStandardQuerySpy: jest.SpiedFunction<
30-
typeof standardQueries.createLockFileForStandardQuery
31-
>;
32-
3328
beforeEach(() => {
3429
resolveQueriesSpy = jest
3530
.spyOn(queryResolver, "resolveQueries")
@@ -48,10 +43,6 @@ describe("runAutoModelQueries", () => {
4843
return [];
4944
},
5045
);
51-
52-
createLockFileForStandardQuerySpy = jest
53-
.spyOn(standardQueries, "createLockFileForStandardQuery")
54-
.mockResolvedValue({});
5546
});
5647

5748
it("should run the query and return the results", async () => {
@@ -156,11 +147,6 @@ describe("runAutoModelQueries", () => {
156147
"tags contain all": ["automodel", "application-mode", "candidates"],
157148
},
158149
);
159-
expect(createLockFileForStandardQuerySpy).toHaveBeenCalledTimes(1);
160-
expect(createLockFileForStandardQuerySpy).toHaveBeenCalledWith(
161-
options.cliServer,
162-
"/a/b/c/ql/candidates.ql",
163-
);
164150
expect(options.queryRunner.createQueryRun).toHaveBeenCalledTimes(1);
165151
expect(options.queryRunner.createQueryRun).toHaveBeenCalledWith(
166152
"/a/b/c/src.zip",

extensions/ql-vscode/test/vscode-tests/no-workspace/data-extensions-editor/data-extensions-editor-queries.test.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,15 @@ import { dirSync } from "tmp-promise";
66
import { fetchExternalApiQueries } from "../../../../src/data-extensions-editor/queries";
77
import { QueryLanguage } from "../../../../src/common/query-language";
88
import { Mode } from "../../../../src/data-extensions-editor/shared/mode";
9+
import { mockedObject } from "../../utils/mocking.helpers";
10+
import { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
911

1012
describe("setUpPack", () => {
13+
const cliServer = mockedObject<CodeQLCliServer>({
14+
packDownload: jest.fn(),
15+
packInstall: jest.fn(),
16+
});
17+
1118
const languages = Object.keys(fetchExternalApiQueries).flatMap((lang) => {
1219
const queryDir = dirSync({ unsafeCleanup: true }).name;
1320
const query = fetchExternalApiQueries[lang as QueryLanguage];
@@ -21,7 +28,7 @@ describe("setUpPack", () => {
2128
test.each(languages)(
2229
"should create files for $language",
2330
async ({ language, queryDir, query }) => {
24-
await setUpPack(queryDir, language);
31+
await setUpPack(cliServer, queryDir, language);
2532

2633
const queryFiles = await readdir(queryDir);
2734
expect(queryFiles.sort()).toEqual(

0 commit comments

Comments
 (0)