From 393c24c65253804d869005a5f0f6268cdfebe9a4 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Thu, 12 Oct 2017 17:39:10 +0200
Subject: [PATCH] fix: stop attempting branch merge if pr exists (#920)

---
 lib/workers/branch/automerge.js       |  4 ++++
 test/workers/branch/automerge.spec.js | 15 ++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/lib/workers/branch/automerge.js b/lib/workers/branch/automerge.js
index ab43531349..90a1f61d5a 100644
--- a/lib/workers/branch/automerge.js
+++ b/lib/workers/branch/automerge.js
@@ -8,6 +8,10 @@ async function tryBranchAutomerge(config) {
   if (!config.automerge || config.automergeType === 'pr') {
     return 'no automerge';
   }
+  const existingPr = config.api.getBranchPr(config.branchName);
+  if (existingPr) {
+    return 'automerge aborted - PR exists';
+  }
   const branchStatus = await config.api.getBranchStatus(
     config.branchName,
     config.requiredStatusChecks
diff --git a/test/workers/branch/automerge.spec.js b/test/workers/branch/automerge.spec.js
index 114a96f1f6..0d3bd5d306 100644
--- a/test/workers/branch/automerge.spec.js
+++ b/test/workers/branch/automerge.spec.js
@@ -8,7 +8,11 @@ describe('workers/branch/automerge', () => {
     beforeEach(() => {
       config = {
         ...defaultConfig,
-        api: { getBranchStatus: jest.fn(), mergeBranch: jest.fn() },
+        api: {
+          getBranchPr: jest.fn(),
+          getBranchStatus: jest.fn(),
+          mergeBranch: jest.fn(),
+        },
         logger,
       };
     });
@@ -27,6 +31,15 @@ describe('workers/branch/automerge', () => {
       config.api.getBranchStatus.mockReturnValueOnce('pending');
       expect(await tryBranchAutomerge(config)).toBe('no automerge');
     });
+    it('returns false if PR exists', async () => {
+      config.api.getBranchPr.mockReturnValueOnce({});
+      config.automerge = true;
+      config.automergeType = 'branch-push';
+      config.api.getBranchStatus.mockReturnValueOnce('success');
+      expect(await tryBranchAutomerge(config)).toBe(
+        'automerge aborted - PR exists'
+      );
+    });
     it('returns false if automerge fails', async () => {
       config.automerge = true;
       config.automergeType = 'branch-push';
-- 
GitLab