diff --git a/src/entrypoint.module.ts b/src/entrypoint.module.ts index ba9306bf..7f6525c4 100644 --- a/src/entrypoint.module.ts +++ b/src/entrypoint.module.ts @@ -67,7 +67,7 @@ export async function getCommits(options: { maxNumber?: number; onlyMissing?: boolean; prFilter?: string; - pullNumber?: number; + pullNumber?: number | number[]; sha?: string | string[]; skipRemoteConfig?: boolean; sourceBranch?: string; @@ -77,13 +77,19 @@ export async function getCommits(options: { const optionsFromGithub = await getOptionsFromGithub(options); if (options.pullNumber) { - return [ - await fetchCommitByPullNumber({ - ...optionsFromGithub, - ...options, - pullNumber: options.pullNumber, - }), - ]; + const pullNumbers = Array.isArray(options.pullNumber) + ? options.pullNumber + : [options.pullNumber]; + + return Promise.all( + pullNumbers.map((pullNumber) => + fetchCommitByPullNumber({ + ...optionsFromGithub, + ...options, + pullNumber, + }) + ) + ); } if (options.sha) { diff --git a/src/lib/getCommits.ts b/src/lib/getCommits.ts index a272838a..5acfe1cc 100644 --- a/src/lib/getCommits.ts +++ b/src/lib/getCommits.ts @@ -22,10 +22,7 @@ export async function getCommits(options: ValidConfigOptions) { try { if (options.sha) { const shas = Array.isArray(options.sha) ? options.sha : [options.sha]; - - // TODO: use Intl.ListFormat to format the sha's spinner.text = `Loading commit "${shas.map(getShortSha)}"`; - const commits = await Promise.all( shas.map((sha) => fetchCommitBySha({ ...options, sha })) ); @@ -33,7 +30,9 @@ export async function getCommits(options: ValidConfigOptions) { spinner.stopAndPersist( getOraPersistsOption( 'Select commit', - commits.map((commit) => commit.sourceCommit.message).join(', ') + commits + .map((commit) => getFirstLine(commit.sourceCommit.message)) + .join(', ') ) ); @@ -41,21 +40,31 @@ export async function getCommits(options: ValidConfigOptions) { } if (options.pullNumber) { - spinner.text = `Loading pull request #${options.pullNumber}`; - const commit = await fetchCommitByPullNumber({ - ...options, - pullNumber: options.pullNumber, // must extract pullNumber to satisfy the ts gods - }); + const pullNumbers = Array.isArray(options.pullNumber) + ? options.pullNumber + : [options.pullNumber]; + + spinner.text = `Loading pull request #${pullNumbers + .map((pullNumber) => `#${pullNumber}`) + .join(', ')}`; + + const commits = await Promise.all( + pullNumbers.map((pullNumber) => + fetchCommitByPullNumber({ ...options, pullNumber }) + ) + ); // add styles to make it look like a prompt question spinner.stopAndPersist( getOraPersistsOption( 'Select pull request', - getFirstLine(commit.sourceCommit.message) + commits + .map((commit) => getFirstLine(commit.sourceCommit.message)) + .join(', ') ) ); - return [commit]; + return commits; } if (!options.interactive && !options.ls) { diff --git a/src/options/ConfigOptions.ts b/src/options/ConfigOptions.ts index ca72ad6c..c29867ed 100644 --- a/src/options/ConfigOptions.ts +++ b/src/options/ConfigOptions.ts @@ -54,7 +54,7 @@ type Options = Partial<{ publishStatusCommentOnAbort: boolean; publishStatusCommentOnFailure: boolean; publishStatusCommentOnSuccess: boolean; - pullNumber: number; + pullNumber: number | number[]; repoForkOwner: string; repoName: string; repoOwner: string;