Skip to content

Commit a704a2b

Browse files
authored
Merge pull request #1804 from github/koesie10/stop-monitor-after-remove
Stop variant analysis monitor after removing the variant analysis from the query history
2 parents 10fe55c + bf328d5 commit a704a2b

4 files changed

Lines changed: 49 additions & 4 deletions

File tree

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,12 @@ export class VariantAnalysisManager
9494
private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager,
9595
) {
9696
super();
97-
this.variantAnalysisMonitor = this.push(new VariantAnalysisMonitor(ctx));
97+
this.variantAnalysisMonitor = this.push(
98+
new VariantAnalysisMonitor(
99+
ctx,
100+
this.shouldCancelMonitorVariantAnalysis.bind(this),
101+
),
102+
);
98103
this.variantAnalysisMonitor.onVariantAnalysisChange(
99104
this.onVariantAnalysisUpdated.bind(this),
100105
);
@@ -319,13 +324,23 @@ export class VariantAnalysisManager
319324
return await fs.pathExists(filePath);
320325
}
321326

327+
private async shouldCancelMonitorVariantAnalysis(
328+
variantAnalysisId: number,
329+
): Promise<boolean> {
330+
return !this.variantAnalyses.has(variantAnalysisId);
331+
}
332+
322333
public async onVariantAnalysisUpdated(
323334
variantAnalysis: VariantAnalysis | undefined,
324335
): Promise<void> {
325336
if (!variantAnalysis) {
326337
return;
327338
}
328339

340+
if (!this.variantAnalyses.has(variantAnalysis.id)) {
341+
return;
342+
}
343+
329344
await this.setVariantAnalysis(variantAnalysis);
330345
this._onVariantAnalysisStatusUpdated.fire(variantAnalysis);
331346
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ export class VariantAnalysisMonitor extends DisposableObject {
2828
);
2929
readonly onVariantAnalysisChange = this._onVariantAnalysisChange.event;
3030

31-
constructor(private readonly extensionContext: ExtensionContext) {
31+
constructor(
32+
private readonly extensionContext: ExtensionContext,
33+
private readonly shouldCancelMonitor: (
34+
variantAnalysisId: number,
35+
) => Promise<boolean>,
36+
) {
3237
super();
3338
}
3439

@@ -51,6 +56,10 @@ export class VariantAnalysisMonitor extends DisposableObject {
5156
return;
5257
}
5358

59+
if (await this.shouldCancelMonitor(variantAnalysis.id)) {
60+
return;
61+
}
62+
5463
const variantAnalysisSummary = await ghApiClient.getVariantAnalysis(
5564
credentials,
5665
variantAnalysis.controllerRepo.id,

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,9 +748,13 @@ describe("Variant Analysis Manager", () => {
748748
});
749749

750750
it("should remove variant analysis", async () => {
751-
await variantAnalysisManager.onVariantAnalysisUpdated(
751+
pathExistsStub.mockImplementation(() => true);
752+
await variantAnalysisManager.rehydrateVariantAnalysis(
752753
dummyVariantAnalysis,
753754
);
755+
expect(pathExistsStub).toBeCalledWith(
756+
path.join(storagePath, dummyVariantAnalysis.id.toString()),
757+
);
754758
expect(variantAnalysisManager.variantAnalysesSize).toBe(1);
755759

756760
await variantAnalysisManager.removeVariantAnalysis(

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ describe("Variant Analysis Monitor", () => {
3636
>;
3737
let cancellationTokenSource: CancellationTokenSource;
3838
let variantAnalysisMonitor: VariantAnalysisMonitor;
39+
let shouldCancelMonitor: jest.Mock<Promise<boolean>, [number]>;
3940
let variantAnalysis: VariantAnalysis;
4041
let variantAnalysisManager: VariantAnalysisManager;
4142
let mockGetDownloadResult: jest.SpiedFunction<
@@ -53,12 +54,17 @@ describe("Variant Analysis Monitor", () => {
5354

5455
variantAnalysis = createMockVariantAnalysis({});
5556

57+
shouldCancelMonitor = jest.fn();
58+
5659
extension = await extensions
5760
.getExtension<CodeQLExtensionInterface | Record<string, never>>(
5861
"GitHub.vscode-codeql",
5962
)!
6063
.activate();
61-
variantAnalysisMonitor = new VariantAnalysisMonitor(extension.ctx);
64+
variantAnalysisMonitor = new VariantAnalysisMonitor(
65+
extension.ctx,
66+
shouldCancelMonitor,
67+
);
6268
variantAnalysisMonitor.onVariantAnalysisChange(onVariantAnalysisChangeSpy);
6369

6470
variantAnalysisManager = extension.variantAnalysisManager;
@@ -114,6 +120,17 @@ describe("Variant Analysis Monitor", () => {
114120
expect(onVariantAnalysisChangeSpy).not.toHaveBeenCalled();
115121
});
116122

123+
it("should return early if variant analysis should be cancelled", async () => {
124+
shouldCancelMonitor.mockResolvedValue(true);
125+
126+
await variantAnalysisMonitor.monitorVariantAnalysis(
127+
variantAnalysis,
128+
cancellationTokenSource.token,
129+
);
130+
131+
expect(onVariantAnalysisChangeSpy).not.toHaveBeenCalled();
132+
});
133+
117134
describe("when the variant analysis fails", () => {
118135
let mockFailedApiResponse: VariantAnalysisApiResponse;
119136

0 commit comments

Comments
 (0)