From 46fae9473a63dbf21cb89a995f5a24a0a31eabdd Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 26 Jun 2018 11:20:26 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20abort=20renovation=20if=20branch?= =?UTF-8?q?=E2=80=99s=20PR=20has=20been=20closed=20or=20merged?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes a race condition where if someone merged multiple PRs in a row then a renovation-in-progress would get confused and post a “PR has been edited” message to an already-merged PR. Closes #2115 --- lib/workers/branch/index.js | 6 ++++++ test/workers/branch/index.spec.js | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/workers/branch/index.js b/lib/workers/branch/index.js index 76eef99ec6..6a6b009744 100644 --- a/lib/workers/branch/index.js +++ b/lib/workers/branch/index.js @@ -86,6 +86,12 @@ async function processBranch(branchConfig, packageFiles) { const branchPr = await platform.getBranchPr(config.branchName); if (branchPr) { logger.debug('Found existing branch PR'); + if (branchPr.state !== 'open') { + logger.info( + 'PR has been closed or merged since this run started - aborting' + ); + throw new Error('repository-changed'); + } if (!branchPr.canRebase) { const subject = 'PR has been edited'; logger.info(subject); diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js index d296f028a2..5d1c7611e4 100644 --- a/test/workers/branch/index.spec.js +++ b/test/workers/branch/index.spec.js @@ -110,6 +110,17 @@ describe('workers/branch', () => { await branchWorker.processBranch(config); expect(parent.getParentBranch.mock.calls.length).toBe(0); }); + it('throws error if closed PR found', async () => { + schedule.isScheduledNow.mockReturnValueOnce(false); + platform.branchExists.mockReturnValueOnce(true); + platform.getBranchPr.mockReturnValueOnce({ + state: 'merged', + canRebase: false, + }); + await expect(branchWorker.processBranch(config)).rejects.toThrow( + /repository-changed/ + ); + }); it('skips branch if edited PR found', async () => { schedule.isScheduledNow.mockReturnValueOnce(false); platform.branchExists.mockReturnValueOnce(true); -- GitLab