Skip to content

Commit 4d4a72b

Browse files
committed
Cleanup automodel temporary pack after use
1 parent 2a9c8ef commit 4d4a72b

2 files changed

Lines changed: 25 additions & 11 deletions

File tree

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,8 @@ export async function runAutoModelQueries({
6363
);
6464

6565
// Generate a pack containing the candidate filters
66-
const filterPackDir = await generateCandidateFilterPack(
67-
databaseItem.language,
68-
candidateMethods,
69-
);
66+
const { packDir: filterPackDir, cleanup: cleanupFilterPack } =
67+
await generateCandidateFilterPack(databaseItem.language, candidateMethods);
7068

7169
const additionalPacks = [...getOnDiskWorkspaceFolders(), filterPackDir];
7270
const extensionPacks = Object.keys(
@@ -85,6 +83,8 @@ export async function runAutoModelQueries({
8583
token: cancellationTokenSource.token,
8684
});
8785

86+
await cleanupFilterPack();
87+
8888
if (!completedQuery) {
8989
return undefined;
9090
}
@@ -155,6 +155,11 @@ async function resolveAutomodelQuery(
155155
return queries[0];
156156
}
157157

158+
type CandidateFilterPackResult = {
159+
packDir: string;
160+
cleanup: () => Promise<void>;
161+
};
162+
158163
/**
159164
* generateCandidateFilterPack will create a temporary extension pack.
160165
* This pack will contain a filter that will restrict the automodel queries
@@ -167,9 +172,9 @@ async function resolveAutomodelQuery(
167172
export async function generateCandidateFilterPack(
168173
language: string,
169174
candidateMethods: MethodSignature[],
170-
): Promise<string> {
175+
): Promise<CandidateFilterPackResult> {
171176
// Pack resides in a temporary directory, to not pollute the workspace.
172-
const packDir = (await dir({ unsafeCleanup: true })).path;
177+
const { path: packDir, cleanup } = await dir({ unsafeCleanup: true });
173178

174179
const syntheticConfigPack = {
175180
name: "codeql/automodel-filter",
@@ -208,7 +213,10 @@ export async function generateCandidateFilterPack(
208213
const filterFile = join(packDir, "filter.yml");
209214
await writeFile(filterFile, dumpYaml(filter), "utf8");
210215

211-
return packDir;
216+
return {
217+
packDir,
218+
cleanup,
219+
};
212220
}
213221

214222
async function interpretAutomodelResults(

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { QueryRunner } from "../../../../src/query-server";
1616
import * as queryResolver from "../../../../src/local-queries/query-resolver";
1717
import { MethodSignature } from "../../../../src/model-editor/method";
1818
import { join } from "path";
19-
import { exists, readFile } from "fs-extra";
19+
import { pathExists, readFile } from "fs-extra";
2020
import { load as loadYaml } from "js-yaml";
2121
import { CancellationTokenSource } from "vscode-jsonrpc";
2222
import { QueryOutputDir } from "../../../../src/run-queries-shared";
@@ -176,12 +176,15 @@ describe("generateCandidateFilterPack", () => {
176176
methodParameters: "()",
177177
},
178178
];
179-
const packDir = await generateCandidateFilterPack("java", candidateMethods);
179+
const { packDir, cleanup } = await generateCandidateFilterPack(
180+
"java",
181+
candidateMethods,
182+
);
180183
expect(packDir).not.toBeUndefined();
181184
const qlpackFile = join(packDir, "codeql-pack.yml");
182-
expect(await exists(qlpackFile)).toBe(true);
185+
expect(await pathExists(qlpackFile)).toBe(true);
183186
const filterFile = join(packDir, "filter.yml");
184-
expect(await exists(filterFile)).toBe(true);
187+
expect(await pathExists(filterFile)).toBe(true);
185188
// Read the contents of filterFile and parse as yaml
186189
const yaml = await loadYaml(await readFile(filterFile, "utf8"));
187190
const extensions = yaml.extensions;
@@ -193,5 +196,8 @@ describe("generateCandidateFilterPack", () => {
193196
expect(extension.data).toBeInstanceOf(Array);
194197
expect(extension.data).toHaveLength(1);
195198
expect(extension.data[0]).toEqual(["org.my", "A", "x", "()"]);
199+
200+
await cleanup();
201+
expect(await pathExists(packDir)).toBe(false);
196202
});
197203
});

0 commit comments

Comments
 (0)