Merge pull request #1621 from github/norascheuch/variant-analysis-rehydrate-and-remove-event

Implement rehydration for variant analysis
This commit is contained in:
Nora
2022-10-24 11:47:44 +02:00
committed by GitHub
4 changed files with 38 additions and 2 deletions

View File

@@ -611,7 +611,15 @@ export class QueryHistoryManager extends DisposableObject {
await this.refreshTreeView();
});
const variantAnalysisRemovedSubscription = this.variantAnalysisManager.onVariantAnalysisRemoved(async (variantAnalysis) => {
const item = this.treeDataProvider.allHistory.find(i => i.t === 'variant-analysis' && i.variantAnalysis.id === variantAnalysis.id);
if (item) {
await this.removeRemoteQuery(item as RemoteQueryHistoryItem);
}
});
this.push(variantAnalysisAddedSubscription);
this.push(variantAnalysisRemovedSubscription);
}
private registerToRemoteQueriesEvents() {
@@ -663,6 +671,9 @@ export class QueryHistoryManager extends DisposableObject {
if (item.t === 'remote') {
await this.remoteQueriesManager.rehydrateRemoteQuery(item.queryId, item.remoteQuery, item.status);
}
if (item.t === 'variant-analysis') {
await this.variantAnalysisManager.rehydrateVariantAnalysis(item.variantAnalysis, item.status);
}
});
}

View File

@@ -26,11 +26,17 @@ import { getControllerRepo } from './run-remote-query';
import { processUpdatedVariantAnalysis } from './variant-analysis-processor';
import PQueue from 'p-queue';
import { createTimestampFile } from '../helpers';
import { QueryStatus } from '../query-status';
import * as fs from 'fs-extra';
export class VariantAnalysisManager extends DisposableObject implements VariantAnalysisViewManager<VariantAnalysisView> {
private readonly _onVariantAnalysisAdded = this.push(new EventEmitter<VariantAnalysis>());
public readonly onVariantAnalysisAdded = this._onVariantAnalysisAdded.event;
private readonly _onVariantAnalysisRemoved = this.push(new EventEmitter<VariantAnalysis>());
public readonly onVariantAnalysisRemoved = this._onVariantAnalysisRemoved.event;
private readonly variantAnalysisMonitor: VariantAnalysisMonitor;
private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager;
private readonly variantAnalyses = new Map<number, VariantAnalysis>();
@@ -52,6 +58,18 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
this.variantAnalysisResultsManager.onResultLoaded(this.onRepoResultLoaded.bind(this));
}
public async rehydrateVariantAnalysis(variantAnalysis: VariantAnalysis, status: QueryStatus) {
if (!(await this.variantAnalysisRecordExists(variantAnalysis.id))) {
// In this case, the variant analysis was deleted from disk, most likely because
// it was purged by another workspace.
this._onVariantAnalysisRemoved.fire(variantAnalysis);
} else if (status === QueryStatus.InProgress) {
// In this case, last time we checked, the query was still in progress.
// We need to setup the monitor to check for completion.
await commands.executeCommand('codeQL.monitorVariantAnalysis', variantAnalysis);
}
}
public async showView(variantAnalysisId: number): Promise<void> {
if (!this.views.has(variantAnalysisId)) {
// The view will register itself with the manager, so we don't need to do anything here.
@@ -92,6 +110,11 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
await this.variantAnalysisResultsManager.loadResults(variantAnalysisId, this.getVariantAnalysisStorageLocation(variantAnalysisId), repositoryFullName);
}
private async variantAnalysisRecordExists(variantAnalysisId: number): Promise<boolean> {
const filePath = this.getVariantAnalysisStorageLocation(variantAnalysisId);
return await fs.pathExists(filePath);
}
private async onVariantAnalysisUpdated(variantAnalysis: VariantAnalysis | undefined): Promise<void> {
if (!variantAnalysis) {
return;

View File

@@ -67,7 +67,8 @@ describe('query-history', () => {
} as any as RemoteQueriesManager;
variantAnalysisManagerStub = {
onVariantAnalysisAdded: sandbox.stub()
onVariantAnalysisAdded: sandbox.stub(),
onVariantAnalysisRemoved: sandbox.stub()
} as any as VariantAnalysisManager;
});

View File

@@ -77,7 +77,8 @@ describe('Remote queries and query history manager', function() {
} as any as RemoteQueriesManager;
variantAnalysisManagerStub = {
onVariantAnalysisAdded: sandbox.stub()
onVariantAnalysisAdded: sandbox.stub(),
onVariantAnalysisRemoved: sandbox.stub()
} as any as VariantAnalysisManager;
});