11import { ExtensionContext , CancellationToken , commands , EventEmitter } from 'vscode' ;
22import { Credentials } from '../authentication' ;
3- import { Logger } from '../logging' ;
43import * as ghApiClient from './gh-api/gh-api-client' ;
54
65import { VariantAnalysis , VariantAnalysisStatus } from './shared/variant-analysis' ;
76import {
8- VariantAnalysis as VariantAnalysisApiResponse
7+ VariantAnalysis as VariantAnalysisApiResponse ,
8+ VariantAnalysisScannedRepository
99} from './gh-api/variant-analysis' ;
1010import { VariantAnalysisMonitorResult } from './shared/variant-analysis-monitor-result' ;
1111import { processFailureReason , processUpdatedVariantAnalysis } from './variant-analysis-processor' ;
@@ -22,7 +22,6 @@ export class VariantAnalysisMonitor extends DisposableObject {
2222
2323 constructor (
2424 private readonly extensionContext : ExtensionContext ,
25- private readonly logger : Logger
2625 ) {
2726 super ( ) ;
2827 }
@@ -73,16 +72,8 @@ export class VariantAnalysisMonitor extends DisposableObject {
7372
7473 this . _onVariantAnalysisChange . fire ( variantAnalysis ) ;
7574
76- void this . logger . log ( '****** Retrieved variant analysis' + JSON . stringify ( variantAnalysisSummary ) ) ;
77-
78- if ( variantAnalysisSummary . scanned_repositories ) {
79- variantAnalysisSummary . scanned_repositories . forEach ( scannedRepo => {
80- if ( ! scannedReposDownloaded . includes ( scannedRepo . repository . id ) && scannedRepo . analysis_status === 'succeeded' ) {
81- void commands . executeCommand ( 'codeQL.autoDownloadVariantAnalysisResult' , scannedRepo , variantAnalysisSummary ) ;
82- scannedReposDownloaded . push ( scannedRepo . repository . id ) ;
83- }
84- } ) ;
85- }
75+ const downloadedRepos = this . downloadVariantAnalysisResults ( variantAnalysisSummary , scannedReposDownloaded ) ;
76+ scannedReposDownloaded . push ( ...downloadedRepos ) ;
8677
8778 if ( variantAnalysisSummary . status === 'completed' ) {
8879 break ;
@@ -94,6 +85,46 @@ export class VariantAnalysisMonitor extends DisposableObject {
9485 return { status : 'CompletedSuccessfully' , scannedReposDownloaded : scannedReposDownloaded } ;
9586 }
9687
88+ private scheduleForDownload (
89+ scannedRepo : VariantAnalysisScannedRepository ,
90+ variantAnalysisSummary : VariantAnalysisApiResponse
91+ ) {
92+ void commands . executeCommand ( 'codeQL.autoDownloadVariantAnalysisResult' , scannedRepo , variantAnalysisSummary ) ;
93+ }
94+
95+ private shouldDownload (
96+ scannedRepo : VariantAnalysisScannedRepository ,
97+ alreadyDownloaded : number [ ]
98+ ) : boolean {
99+ return ! alreadyDownloaded . includes ( scannedRepo . repository . id ) && scannedRepo . analysis_status === 'succeeded' ;
100+ }
101+
102+ private getReposToDownload (
103+ variantAnalysisSummary : VariantAnalysisApiResponse ,
104+ alreadyDownloaded : number [ ]
105+ ) : VariantAnalysisScannedRepository [ ] {
106+ if ( variantAnalysisSummary . scanned_repositories ) {
107+ return variantAnalysisSummary . scanned_repositories . filter ( scannedRepo => this . shouldDownload ( scannedRepo , alreadyDownloaded ) ) ;
108+ } else {
109+ return [ ] ;
110+ }
111+ }
112+
113+ private downloadVariantAnalysisResults (
114+ variantAnalysisSummary : VariantAnalysisApiResponse ,
115+ scannedReposDownloaded : number [ ]
116+ ) : number [ ] {
117+ const repoResultsToDownload = this . getReposToDownload ( variantAnalysisSummary , scannedReposDownloaded ) ;
118+ const downloadedRepos : number [ ] = [ ] ;
119+
120+ repoResultsToDownload . forEach ( scannedRepo => {
121+ downloadedRepos . push ( scannedRepo . repository . id ) ;
122+ this . scheduleForDownload ( scannedRepo , variantAnalysisSummary ) ;
123+ } ) ;
124+
125+ return downloadedRepos ;
126+ }
127+
97128 private async sleep ( ms : number ) {
98129 return new Promise ( resolve => setTimeout ( resolve , ms ) ) ;
99130 }
0 commit comments