@@ -18,14 +18,17 @@ import { unzipFile } from '../pure/zip';
1818
1919type CacheKey = `${number } /${string } `;
2020
21- const createCacheKey = ( variantAnalysisId : number , repoTask : VariantAnalysisRepoTask ) : CacheKey => `${ variantAnalysisId } /${ repoTask . repository . full_name } ` ;
21+ const createCacheKey = ( variantAnalysisId : number , repositoryFullName : string ) : CacheKey => `${ variantAnalysisId } /${ repositoryFullName } ` ;
2222
2323export type ResultDownloadedEvent = {
2424 variantAnalysisId : number ;
2525 repoTask : VariantAnalysisRepoTask ;
2626}
2727
2828export class VariantAnalysisResultsManager extends DisposableObject {
29+ private static readonly REPO_TASK_FILENAME = 'repo_task.json' ;
30+ private static readonly RESULTS_DIRECTORY = 'results' ;
31+
2932 private readonly cachedResults : Map < CacheKey , VariantAnalysisScannedRepositoryResult > ;
3033
3134 private readonly _onResultDownloaded = this . push ( new EventEmitter < ResultDownloadedEvent > ( ) ) ;
@@ -63,8 +66,10 @@ export class VariantAnalysisResultsManager extends DisposableObject {
6366 await fs . mkdir ( resultDirectory , { recursive : true } ) ;
6467 }
6568
69+ await fs . outputJson ( path . join ( resultDirectory , VariantAnalysisResultsManager . REPO_TASK_FILENAME ) , repoTask ) ;
70+
6671 const zipFilePath = path . join ( resultDirectory , 'results.zip' ) ;
67- const unzippedFilesDirectory = path . join ( resultDirectory , 'results' ) ;
72+ const unzippedFilesDirectory = path . join ( resultDirectory , VariantAnalysisResultsManager . RESULTS_DIRECTORY ) ;
6873
6974 fs . writeFileSync ( zipFilePath , Buffer . from ( result ) ) ;
7075 await unzipFile ( zipFilePath , unzippedFilesDirectory ) ;
@@ -77,41 +82,44 @@ export class VariantAnalysisResultsManager extends DisposableObject {
7782
7883 public async loadResults (
7984 variantAnalysisId : number ,
80- repoTask : VariantAnalysisRepoTask
85+ repositoryFullName : string
8186 ) : Promise < VariantAnalysisScannedRepositoryResult > {
82- const result = this . cachedResults . get ( createCacheKey ( variantAnalysisId , repoTask ) ) ;
87+ const result = this . cachedResults . get ( createCacheKey ( variantAnalysisId , repositoryFullName ) ) ;
8388
84- return result ?? await this . loadResultsIntoMemory ( variantAnalysisId , repoTask ) ;
89+ return result ?? await this . loadResultsIntoMemory ( variantAnalysisId , repositoryFullName ) ;
8590 }
8691
8792 private async loadResultsIntoMemory (
8893 variantAnalysisId : number ,
89- repoTask : VariantAnalysisRepoTask ,
94+ repositoryFullName : string ,
9095 ) : Promise < VariantAnalysisScannedRepositoryResult > {
91- const result = await this . loadResultsFromStorage ( variantAnalysisId , repoTask ) ;
92- this . cachedResults . set ( createCacheKey ( variantAnalysisId , repoTask ) , result ) ;
96+ const result = await this . loadResultsFromStorage ( variantAnalysisId , repositoryFullName ) ;
97+ this . cachedResults . set ( createCacheKey ( variantAnalysisId , repositoryFullName ) , result ) ;
9398 this . _onResultLoaded . fire ( result ) ;
9499 return result ;
95100 }
96101
97102 private async loadResultsFromStorage (
98103 variantAnalysisId : number ,
99- repoTask : VariantAnalysisRepoTask ,
104+ repositoryFullName : string ,
100105 ) : Promise < VariantAnalysisScannedRepositoryResult > {
101- if ( ! ( await this . isVariantAnalysisRepoDownloaded ( variantAnalysisId , repoTask ) ) ) {
106+ if ( ! ( await this . isVariantAnalysisRepoDownloaded ( variantAnalysisId , repositoryFullName ) ) ) {
102107 throw new Error ( 'Variant analysis results not downloaded' ) ;
103108 }
104109
110+ const storageDirectory = this . getRepoStorageDirectory ( variantAnalysisId , repositoryFullName ) ;
111+
112+ const repoTask : VariantAnalysisRepoTask = await fs . readJson ( path . join ( storageDirectory , VariantAnalysisResultsManager . REPO_TASK_FILENAME ) ) ;
113+
105114 if ( ! repoTask . database_commit_sha || ! repoTask . source_location_prefix ) {
106115 throw new Error ( 'Missing database commit SHA' ) ;
107116 }
108117
109118 const fileLinkPrefix = this . createGitHubDotcomFileLinkPrefix ( repoTask . repository . full_name , repoTask . database_commit_sha ) ;
110119
111- const storageDirectory = this . getRepoStorageDirectory ( variantAnalysisId , repoTask . repository . full_name ) ;
112-
113- const sarifPath = path . join ( storageDirectory , 'results.sarif' ) ;
114- const bqrsPath = path . join ( storageDirectory , 'results.bqrs' ) ;
120+ const resultsDirectory = path . join ( storageDirectory , VariantAnalysisResultsManager . RESULTS_DIRECTORY ) ;
121+ const sarifPath = path . join ( resultsDirectory , 'results.sarif' ) ;
122+ const bqrsPath = path . join ( resultsDirectory , 'results.bqrs' ) ;
115123 if ( await fs . pathExists ( sarifPath ) ) {
116124 const interpretedResults = await this . readSarifResults ( sarifPath , fileLinkPrefix ) ;
117125
@@ -137,9 +145,9 @@ export class VariantAnalysisResultsManager extends DisposableObject {
137145
138146 private async isVariantAnalysisRepoDownloaded (
139147 variantAnalysisId : number ,
140- repoTask : VariantAnalysisRepoTask ,
148+ repositoryFullName : string ,
141149 ) : Promise < boolean > {
142- return await fs . pathExists ( this . getRepoStorageDirectory ( variantAnalysisId , repoTask . repository . full_name ) ) ;
150+ return await fs . pathExists ( this . getRepoStorageDirectory ( variantAnalysisId , repositoryFullName ) ) ;
143151 }
144152
145153 private async readBqrsResults ( filePath : string , fileLinkPrefix : string , sourceLocationPrefix : string ) : Promise < AnalysisRawResults > {
0 commit comments