MRVA: Export results to local markdown files (#1344)

This commit is contained in:
Shati Patel
2022-05-17 10:03:23 +01:00
committed by GitHub
parent 50ec97ad91
commit 9367d5fb45
2 changed files with 49 additions and 5 deletions

View File

@@ -763,6 +763,18 @@ export class QueryHistoryManager extends DisposableObject {
}
}
async getQueryHistoryItemDirectory(queryHistoryItem: QueryHistoryInfo): Promise<string> {
if (queryHistoryItem.t === 'local') {
if (queryHistoryItem.completedQuery) {
return queryHistoryItem.completedQuery.query.querySaveDir;
}
} else if (queryHistoryItem.t === 'remote') {
return path.join(this.queryStorageDir, queryHistoryItem.queryId);
}
throw new Error('Unable to get query directory');
}
async handleOpenQueryDirectory(
singleItem: QueryHistoryInfo,
multiSelect: QueryHistoryInfo[]

View File

@@ -1,7 +1,10 @@
import { window, commands, Uri, ExtensionContext, QuickPickItem } from 'vscode';
import * as path from 'path';
import * as fs from 'fs-extra';
import { window, commands, Uri, ExtensionContext, QuickPickItem, workspace, ViewColumn } from 'vscode';
import { Credentials } from '../authentication';
import { UserCancellationException } from '../commandRunner';
import { showInformationMessageWithAction, showAndLogInformationMessage } from '../helpers';
import { showInformationMessageWithAction } from '../helpers';
import { logger } from '../logging';
import { QueryHistoryManager } from '../query-history';
import { createGist } from './gh-actions-api-client';
@@ -41,9 +44,10 @@ export async function exportRemoteQueryResults(
if (exportFormat === gistOption) {
await exportResultsToGist(ctx, query, analysesResults);
} else if (exportFormat === localMarkdownOption) {
// TODO: Write function that creates local markdown files
// const markdownFiles = generateMarkdown(query, analysesResults, 'local');
void showAndLogInformationMessage('Local markdown export not yet available');
const queryDirectoryPath = await queryHistoryManager.getQueryHistoryItemDirectory(
queryHistoryItem
);
await exportResultsToLocalMarkdown(queryDirectoryPath, query, analysesResults);
}
}
@@ -95,3 +99,31 @@ async function exportResultsToGist(
}
}
}
/**
* Converts the results of a remote query to markdown and saves the files locally
* in the query directory (where query results and metadata are also saved).
*/
async function exportResultsToLocalMarkdown(
queryDirectoryPath: string,
query: RemoteQuery,
analysesResults: AnalysisResults[]
) {
const markdownFiles = generateMarkdown(query, analysesResults, 'local');
const exportedResultsPath = path.join(queryDirectoryPath, 'exported-results');
await fs.ensureDir(exportedResultsPath);
for (const markdownFile of markdownFiles) {
const filePath = path.join(exportedResultsPath, `${markdownFile.fileName}.md`);
await fs.writeFile(filePath, markdownFile.content.join('\n'), 'utf8');
}
const shouldOpenExportedResults = await showInformationMessageWithAction(
`Variant analysis results exported to \"${exportedResultsPath}\".`,
'Open exported results'
);
if (shouldOpenExportedResults) {
const summaryFilePath = path.join(exportedResultsPath, '_summary.md');
const summaryFile = await workspace.openTextDocument(summaryFilePath);
await window.showTextDocument(summaryFile, ViewColumn.One);
await commands.executeCommand('revealFileInOS', Uri.file(summaryFilePath));
}
}