Merge pull request #1621 from github/norascheuch/variant-analysis-rehydrate-and-remove-event
Implement rehydration for variant analysis
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user