@@ -24,6 +24,10 @@ import {
2424 VariantAnalysisScannedRepository ,
2525 VariantAnalysisScannedRepositoryResult
2626} from './shared/variant-analysis' ;
27+ import {
28+ filterAndSortRepositoriesWithResults ,
29+ RepositoriesFilterSortStateWithIds ,
30+ } from '../pure/variant-analysis-filter-sort' ;
2731
2832/**
2933 * Exports the results of the currently-selected remote query or variant analysis.
@@ -73,21 +77,22 @@ export async function exportRemoteQueryResults(
7377 }
7478
7579 const exportDirectory = await queryHistoryManager . getQueryHistoryItemDirectory ( queryHistoryItem ) ;
80+ const exportedResultsDirectory = path . join ( exportDirectory , 'exported-results' ) ;
7681
77- await exportRemoteQueryAnalysisResults ( ctx , exportDirectory , query , analysesResults , exportFormat ) ;
82+ await exportRemoteQueryAnalysisResults ( ctx , exportedResultsDirectory , query , analysesResults , exportFormat ) ;
7883}
7984
8085export async function exportRemoteQueryAnalysisResults (
8186 ctx : ExtensionContext ,
82- exportDirectory : string ,
87+ exportedResultsPath : string ,
8388 query : RemoteQuery ,
8489 analysesResults : AnalysisResults [ ] ,
8590 exportFormat : 'gist' | 'local' ,
8691) {
8792 const description = buildGistDescription ( query , analysesResults ) ;
8893 const markdownFiles = generateMarkdown ( query , analysesResults , exportFormat ) ;
8994
90- await exportResults ( ctx , exportDirectory , description , markdownFiles , exportFormat ) ;
95+ await exportResults ( ctx , exportedResultsPath , description , markdownFiles , exportFormat ) ;
9196}
9297
9398/**
@@ -98,6 +103,7 @@ export async function exportVariantAnalysisResults(
98103 ctx : ExtensionContext ,
99104 variantAnalysisManager : VariantAnalysisManager ,
100105 variantAnalysisId : number ,
106+ filterSort ?: RepositoriesFilterSortStateWithIds ,
101107) : Promise < void > {
102108 const variantAnalysis = await variantAnalysisManager . getVariantAnalysis ( variantAnalysisId ) ;
103109 if ( ! variantAnalysis ) {
@@ -113,11 +119,16 @@ export async function exportVariantAnalysisResults(
113119 }
114120
115121 async function * getAnalysesResults ( ) : AsyncGenerator < [ VariantAnalysisScannedRepository , VariantAnalysisScannedRepositoryResult ] > {
116- if ( ! variantAnalysis ?. scannedRepos ) {
122+ if ( ! variantAnalysis ) {
117123 return ;
118124 }
119125
120- for ( const repo of variantAnalysis . scannedRepos ) {
126+ const repositories = filterAndSortRepositoriesWithResults ( variantAnalysis . scannedRepos , filterSort ) ;
127+ if ( ! repositories ) {
128+ return ;
129+ }
130+
131+ for ( const repo of repositories ) {
121132 if ( repo . resultCount == 0 ) {
122133 yield [ repo , {
123134 variantAnalysisId : variantAnalysis . id ,
@@ -136,20 +147,24 @@ export async function exportVariantAnalysisResults(
136147
137148 const exportDirectory = variantAnalysisManager . getVariantAnalysisStorageLocation ( variantAnalysis . id ) ;
138149
139- await exportVariantAnalysisAnalysisResults ( ctx , exportDirectory , variantAnalysis , getAnalysesResults ( ) , exportFormat ) ;
150+ // The date will be formatted like the following: 20221115T123456Z. The time is in UTC.
151+ const formattedDate = ( new Date ( ) ) . toISOString ( ) . replace ( / [ - : ] / g, '' ) . replace ( / \. \d + Z $ / , 'Z' ) ;
152+ const exportedResultsDirectory = path . join ( exportDirectory , 'exported-results' , `results_${ formattedDate } ` ) ;
153+
154+ await exportVariantAnalysisAnalysisResults ( ctx , exportedResultsDirectory , variantAnalysis , getAnalysesResults ( ) , exportFormat ) ;
140155}
141156
142157export async function exportVariantAnalysisAnalysisResults (
143158 ctx : ExtensionContext ,
144- exportDirectory : string ,
159+ exportedResultsPath : string ,
145160 variantAnalysis : VariantAnalysis ,
146161 analysesResults : AsyncIterable < [ VariantAnalysisScannedRepository , VariantAnalysisScannedRepositoryResult ] > ,
147162 exportFormat : 'gist' | 'local' ,
148163) {
149164 const description = buildVariantAnalysisGistDescription ( variantAnalysis ) ;
150165 const markdownFiles = await generateVariantAnalysisMarkdown ( variantAnalysis , analysesResults , 'gist' ) ;
151166
152- await exportResults ( ctx , exportDirectory , description , markdownFiles , exportFormat ) ;
167+ await exportResults ( ctx , exportedResultsPath , description , markdownFiles , exportFormat ) ;
153168}
154169
155170/**
@@ -190,15 +205,15 @@ async function determineExportFormat(): Promise<'gist' | 'local' | undefined> {
190205
191206export async function exportResults (
192207 ctx : ExtensionContext ,
193- exportDirectory : string ,
208+ exportedResultsPath : string ,
194209 description : string ,
195210 markdownFiles : MarkdownFile [ ] ,
196211 exportFormat : 'gist' | 'local' ,
197212) {
198213 if ( exportFormat === 'gist' ) {
199214 await exportToGist ( ctx , description , markdownFiles ) ;
200215 } else if ( exportFormat === 'local' ) {
201- await exportToLocalMarkdown ( exportDirectory , markdownFiles ) ;
216+ await exportToLocalMarkdown ( exportedResultsPath , markdownFiles ) ;
202217 }
203218}
204219
@@ -254,10 +269,9 @@ const buildVariantAnalysisGistDescription = (variantAnalysis: VariantAnalysis) =
254269 * Saves the results of an exported query to local markdown files.
255270 */
256271async function exportToLocalMarkdown (
257- exportDirectory : string ,
272+ exportedResultsPath : string ,
258273 markdownFiles : MarkdownFile [ ] ,
259274) {
260- const exportedResultsPath = path . join ( exportDirectory , 'exported-results' ) ;
261275 await fs . ensureDir ( exportedResultsPath ) ;
262276 for ( const markdownFile of markdownFiles ) {
263277 const filePath = path . join ( exportedResultsPath , `${ markdownFile . fileName } .md` ) ;
0 commit comments