UNPKG

backport

Version:

A CLI tool that automates the process of backporting commits

79 lines 3.48 kB
/** Dispatches to the correct fetch* function based on options (pullNumber, sha, author, prQuery). */ import chalk from 'chalk'; import { BackportError } from './backport-error.js'; import { getFirstLine, getShortSha } from './github/commit-formatters.js'; import { fetchCommitsByPullNumber } from './github/v4/fetchCommits/fetch-commit-by-pull-number.js'; import { fetchCommitBySha } from './github/v4/fetchCommits/fetch-commit-by-sha.js'; import { fetchCommitsByAuthor } from './github/v4/fetchCommits/fetch-commits-by-author.js'; import { fetchPullRequestsBySearchQuery } from './github/v4/fetchCommits/fetch-pull-requests-by-search-query.js'; import { ora } from './ora.js'; import { promptForCommits } from './prompts.js'; function getOraPersistsOption(question, answer) { return { symbol: chalk.green('?'), text: `${chalk.bold(question)} ${chalk.cyan(answer)}`, }; } export async function getCommits(options) { const spinner = ora(options.interactive).start(); try { if (options.sha) { const shas = Array.isArray(options.sha) ? options.sha : [options.sha]; spinner.text = `Loading commit "${shas.map(getShortSha)}"`; const commits = await Promise.all(shas.map((sha) => fetchCommitBySha({ ...options, sha }))); spinner.stopAndPersist(getOraPersistsOption('Select commit', commits .map((commit) => getFirstLine(commit.sourceCommit.message)) .join(', '))); return commits; } if (options.pullNumber) { const pullNumbers = Array.isArray(options.pullNumber) ? options.pullNumber : [options.pullNumber]; spinner.text = `Loading pull request ${pullNumbers .map((pullNumber) => `#${pullNumber}`) .join(', ')}`; const nestedCommits = await Promise.all(pullNumbers.map((pullNumber) => fetchCommitsByPullNumber({ ...options, pullNumber }))); const commits = nestedCommits.flat(); // add styles to make it look like a prompt question spinner.stopAndPersist(getOraPersistsOption('Select pull request', commits .map((commit) => getFirstLine(commit.sourceCommit.message)) .join(', '))); return commits; } if (!options.interactive && !options.ls) { throw new BackportError({ code: 'config-error-exception', message: 'When "--interactive" is disabled either `--sha` or `--pr` must be specified', }); } spinner.text = options.prQuery ? 'Loading pull requests...' : `Loading commits from branch "${options.sourceBranch}"...`; const commitChoices = options.prQuery === undefined ? await fetchCommitsByAuthor(options) : await fetchPullRequestsBySearchQuery({ ...options, prQuery: options.prQuery, }); spinner.stop(); if (options.ls) { return commitChoices; } return promptForCommits({ commitChoices, isMultipleChoice: options.multipleCommits, showDetails: options.verbose, }); } catch (error) { if (options.ls) { spinner.stop(); } else { spinner.fail(); } throw error; } } //# sourceMappingURL=get-commits.js.map