Skip to content

Commit ee37fbf

Browse files
Merge pull request #1656 from github/nora-charis-elena/handle-item-removal-take-two
Implement `handleRemoveHistoryItem` for variant analysis history items - take two
2 parents 50ec718 + 832211d commit ee37fbf

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

extensions/ql-vscode/src/query-history.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -635,7 +635,7 @@ export class QueryHistoryManager extends DisposableObject {
635635
const variantAnalysisRemovedSubscription = this.variantAnalysisManager.onVariantAnalysisRemoved(async (variantAnalysis) => {
636636
const items = this.treeDataProvider.allHistory.filter(i => i.t === 'variant-analysis' && i.variantAnalysis.id === variantAnalysis.id);
637637
items.forEach(async (item) => {
638-
await this.removeRemoteQuery(item as RemoteQueryHistoryItem);
638+
await this.removeVariantAnalysis(item as VariantAnalysisHistoryItem);
639639
});
640640
});
641641

@@ -786,7 +786,7 @@ export class QueryHistoryManager extends DisposableObject {
786786
} else if (item.t === 'remote') {
787787
await this.removeRemoteQuery(item);
788788
} else if (item.t === 'variant-analysis') {
789-
// TODO
789+
await this.removeVariantAnalysis(item);
790790
} else {
791791
assertNever(item);
792792
}
@@ -812,6 +812,18 @@ export class QueryHistoryManager extends DisposableObject {
812812
await this.remoteQueriesManager.removeRemoteQuery(item.queryId);
813813
}
814814

815+
private async removeVariantAnalysis(item: VariantAnalysisHistoryItem): Promise<void> {
816+
// We can remove a Variant Analysis locally, but not remotely.
817+
// The user must cancel the query on GitHub Actions explicitly.
818+
this.treeDataProvider.remove(item);
819+
void logger.log(`Deleted ${this.labelProvider.getLabel(item)}.`);
820+
if (item.status === QueryStatus.InProgress) {
821+
void logger.log('The variant analysis is still running on GitHub Actions. To cancel there, you must go to the workflow run in your browser.');
822+
}
823+
824+
await this.variantAnalysisManager.removeVariantAnalysis(item.variantAnalysis);
825+
}
826+
815827
async handleSortByName() {
816828
if (this.treeDataProvider.sortOrder === SortOrder.NameAsc) {
817829
this.treeDataProvider.sortOrder = SortOrder.NameDesc;

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,17 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA
7272
}
7373
}
7474

75+
public async removeVariantAnalysis(variantAnalysis: VariantAnalysis) {
76+
this.variantAnalysisResultsManager.removeAnalysisResults(variantAnalysis);
77+
await this.removeStorageDirectory(variantAnalysis.id);
78+
this.variantAnalyses.delete(variantAnalysis.id);
79+
}
80+
81+
private async removeStorageDirectory(variantAnalysisId: number) {
82+
const storageLocation = this.getVariantAnalysisStorageLocation(variantAnalysisId);
83+
await fs.remove(storageLocation);
84+
}
85+
7586
public async showView(variantAnalysisId: number): Promise<void> {
7687
if (!this.variantAnalyses.get(variantAnalysisId)) {
7788
void showAndLogErrorMessage(`No variant analysis found with id: ${variantAnalysisId}.`);

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { sarifParser } from '../sarif-parser';
99
import { extractAnalysisAlerts } from './sarif-processing';
1010
import { CodeQLCliServer } from '../cli';
1111
import { extractRawResults } from './bqrs-processing';
12-
import { VariantAnalysisScannedRepositoryResult } from './shared/variant-analysis';
12+
import { VariantAnalysis, VariantAnalysisScannedRepositoryResult } from './shared/variant-analysis';
1313
import { DisposableObject, DisposeHandler } from '../pure/disposable-object';
1414
import { VariantAnalysisRepoTask } from './gh-api/variant-analysis';
1515
import * as ghApiClient from './gh-api/gh-api-client';
@@ -179,6 +179,19 @@ export class VariantAnalysisResultsManager extends DisposableObject {
179179
return `https://github.com/${fullName}/blob/${sha}`;
180180
}
181181

182+
public removeAnalysisResults(variantAnalysis: VariantAnalysis) {
183+
const scannedRepos = variantAnalysis.scannedRepos;
184+
185+
if (scannedRepos) {
186+
scannedRepos.forEach(scannedRepo => {
187+
const cacheKey = createCacheKey(variantAnalysis.id, scannedRepo.repository.fullName);
188+
if (this.cachedResults.get(cacheKey)) {
189+
this.cachedResults.delete(cacheKey);
190+
}
191+
});
192+
}
193+
}
194+
182195
public dispose(disposeHandler?: DisposeHandler) {
183196
super.dispose(disposeHandler);
184197

0 commit comments

Comments
 (0)