fix(open-authoring): use origin repo when calling compare API (#3363)

since we create open authoring branches from the origin default branch, we need to use the origin repo when calling the compare API
This commit is contained in:
Erez Rokah 2020-03-03 19:12:40 +01:00 committed by GitHub
parent 567adc7e11
commit e40b81a564
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
70 changed files with 16602 additions and 15837 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -523,11 +523,7 @@ export default class API {
const { collection, slug } = this.parseContentKey(contentKey); const { collection, slug } = this.parseContentKey(contentKey);
const branch = branchFromContentKey(contentKey); const branch = branchFromContentKey(contentKey);
const pullRequest = await this.getBranchPullRequest(branch); const pullRequest = await this.getBranchPullRequest(branch);
const { files: diffs } = await this.getDifferences( const { files: diffs } = await this.getDifferences(this.branch, pullRequest.head.sha);
this.branch,
pullRequest.head.sha,
this.repoURL,
);
// media files don't have a patch attribute, except svg files // media files don't have a patch attribute, except svg files
const { path, newFile } = diffs const { path, newFile } = diffs
.filter(d => d.patch && !d.filename.endsWith('.svg')) .filter(d => d.patch && !d.filename.endsWith('.svg'))
@ -944,7 +940,10 @@ export default class API {
} }
} else { } else {
// Entry is already on editorial review workflow - commit to existing branch // Entry is already on editorial review workflow - commit to existing branch
const { files: diffs } = await this.getDifferences(this.branch, branch, this.repoURL); const { files: diffs } = await this.getDifferences(
this.branch,
await this.getHeadReference(branch),
);
// mark media files to remove // mark media files to remove
const mediaFilesToRemove: { path: string; sha: string | null }[] = []; const mediaFilesToRemove: { path: string; sha: string | null }[] = [];
@ -964,16 +963,28 @@ export default class API {
} }
} }
async getDifferences(from: string, to: string, repoURL: string) { async getDifferences(from: string, to: string) {
const result: Octokit.ReposCompareCommitsResponse = await this.request( const attempts = 3;
`${repoURL}/compare/${from}...${to}`, // retry this as sometimes GitHub returns an initial 404 on cross repo compare
); for (let i = 1; i <= attempts; i++) {
return result; try {
const result: Octokit.ReposCompareCommitsResponse = await this.request(
`${this.originRepoURL}/compare/${from}...${to}`,
);
return result;
} catch (e) {
if (i === attempts) {
throw e;
}
await new Promise(resolve => setTimeout(resolve, 500));
}
}
throw new APIError('Not Found', 404, API_NAME);
} }
async rebaseSingleCommit(baseCommit: GitHubCompareCommit, commit: GitHubCompareCommit) { async rebaseSingleCommit(baseCommit: GitHubCompareCommit, commit: GitHubCompareCommit) {
// first get the diff between the commits // first get the diff between the commits
const result = await this.getDifferences(commit.parents[0].sha, commit.sha, this.repoURL); const result = await this.getDifferences(commit.parents[0].sha, commit.sha);
const files = getTreeFiles(result.files as GitHubCompareFiles); const files = getTreeFiles(result.files as GitHubCompareFiles);
// create a tree with baseCommit as the base with the diff applied // create a tree with baseCommit as the base with the diff applied
@ -1024,7 +1035,6 @@ export default class API {
const { base_commit: baseCommit, commits } = await this.getDifferences( const { base_commit: baseCommit, commits } = await this.getDifferences(
this.branch, this.branch,
await this.getHeadReference(branch), await this.getHeadReference(branch),
this.originRepoURL,
); );
// Rebase the branch based on the diff // Rebase the branch based on the diff
const rebasedHead = await this.rebaseCommits(baseCommit, commits); const rebasedHead = await this.rebaseCommits(baseCommit, commits);
@ -1066,7 +1076,7 @@ export default class API {
} else if (newStatus === 'pending_review') { } else if (newStatus === 'pending_review') {
const branch = branchFromContentKey(contentKey); const branch = branchFromContentKey(contentKey);
// get the first commit message as the pr title // get the first commit message as the pr title
const diff = await this.getDifferences(this.branch, branch, this.repoURL); const diff = await this.getDifferences(this.branch, await this.getHeadReference(branch));
const title = diff.commits[0]?.commit?.message || API.DEFAULT_COMMIT_MESSAGE; const title = diff.commits[0]?.commit?.message || API.DEFAULT_COMMIT_MESSAGE;
await this.createPR(title, branch); await this.createPR(title, branch);
} }
@ -1235,11 +1245,7 @@ export default class API {
} }
async forceMergePR(pullRequest: GitHubPull) { async forceMergePR(pullRequest: GitHubPull) {
const result = await this.getDifferences( const result = await this.getDifferences(pullRequest.base.sha, pullRequest.head.sha);
pullRequest.base.sha,
pullRequest.head.sha,
this.repoURL,
);
const files = getTreeFiles(result.files as GitHubCompareFiles); const files = getTreeFiles(result.files as GitHubCompareFiles);
let commitMessage = 'Automatically generated. Merged on Netlify CMS\n\nForce merge of:'; let commitMessage = 'Automatically generated. Merged on Netlify CMS\n\nForce merge of:';

View File

@ -653,7 +653,7 @@ describe('github API', () => {
await expect(api.rebaseSingleCommit(baseCommit, commit)).resolves.toBe(newCommit); await expect(api.rebaseSingleCommit(baseCommit, commit)).resolves.toBe(newCommit);
expect(api.getDifferences).toHaveBeenCalledTimes(1); expect(api.getDifferences).toHaveBeenCalledTimes(1);
expect(api.getDifferences).toHaveBeenCalledWith('parent_sha', 'sha', '/repos/owner/repo'); expect(api.getDifferences).toHaveBeenCalledWith('parent_sha', 'sha');
expect(api.updateTree).toHaveBeenCalledTimes(1); expect(api.updateTree).toHaveBeenCalledTimes(1);
expect(api.updateTree).toHaveBeenCalledWith('base_commit_sha', [ expect(api.updateTree).toHaveBeenCalledWith('base_commit_sha', [