backport
Version:
A CLI tool that automates the process of backporting commits
84 lines • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchPullRequestsBySearchQuery = void 0;
const lodash_1 = require("lodash");
const generated_1 = require("../../../../graphql/generated");
const filterEmpty_1 = require("../../../../utils/filterEmpty");
const filterUnmergedCommits_1 = require("../../../../utils/filterUnmergedCommits");
const BackportError_1 = require("../../../BackportError");
const remoteConfig_1 = require("../../../remoteConfig");
const parseSourceCommit_1 = require("../../../sourceCommit/parseSourceCommit");
const graphqlClient_1 = require("../client/graphqlClient");
async function fetchPullRequestsBySearchQuery(options) {
const { accessToken, author, dateSince, dateUntil, githubApiBaseUrlV4 = 'https://api.github.com/graphql', maxNumber = 10, prFilter, repoName, repoOwner, sourceBranch, } = options;
const query = (0, generated_1.graphql)(`
query PullRequestBySearchQuery($query: String!, $maxNumber: Int!) {
search(query: $query, type: ISSUE, first: $maxNumber) {
nodes {
... on PullRequest {
__typename
mergeCommit {
__typename
...SourceCommitWithTargetPullRequestFragment
}
}
}
}
}
`);
function dateFilter() {
if (dateUntil && dateSince) {
return [`merged:${dateSince}..${dateUntil}`];
}
if (dateUntil) {
return [`merged:<${dateUntil}`];
}
if (dateSince) {
return [`merged:>${dateSince}`];
}
return [];
}
const searchQuery = [
'type:pr',
'is:merged',
'sort:created-desc',
`repo:${repoOwner}/${repoName}`,
...(options.author ? [`author:${options.author}`] : []),
...(prFilter.includes('base:') ? [] : [`base:${sourceBranch}`]),
...dateFilter(),
prFilter,
].join(' ');
const variables = {
query: searchQuery,
maxNumber,
};
const client = (0, graphqlClient_1.getGraphQLClient)({ accessToken, githubApiBaseUrlV4 });
const result = await client.query(query, variables);
if (result.error && !(0, remoteConfig_1.isMissingConfigFileException)(result)) {
throw new graphqlClient_1.GithubV4Exception(result);
}
const { data } = result;
const commits = data?.search.nodes
?.map((pullRequestNode) => {
if (pullRequestNode?.__typename === 'PullRequest') {
const sourceCommit = pullRequestNode.mergeCommit;
if (sourceCommit) {
return (0, parseSourceCommit_1.parseSourceCommit)({ options, sourceCommit });
}
}
})
.filter(filterEmpty_1.filterNil);
// terminate if not commits were found
if (!commits || (0, lodash_1.isEmpty)(commits)) {
const errorText = author
? `No commits found for query:\n ${searchQuery}\n\nUse \`--all\` to see commits by all users or \`--author=<username>\` for commits from a specific user`
: `No commits found for query:\n ${searchQuery}`;
throw new BackportError_1.BackportError(errorText);
}
if (options.onlyMissing) {
return commits.filter(filterUnmergedCommits_1.filterUnmergedCommits);
}
return commits;
}
exports.fetchPullRequestsBySearchQuery = fetchPullRequestsBySearchQuery;
//# sourceMappingURL=fetchPullRequestsBySearchQuery.js.map