From f598c5f89910d0a48c3bc5fd4efca560bc264f7c Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Mon, 21 Aug 2017 11:17:47 +0200
Subject: [PATCH] fix: do not automerge pr if it has been modified (#711)

Add check for pr.canRebase. This will be false if the PR has been modified.

Fixes #790
---
 lib/workers/pr/index.js       | 5 +++++
 test/workers/pr/index.spec.js | 9 +++++++++
 2 files changed, 14 insertions(+)

diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js
index ac2b425845..3cbcd01bb4 100644
--- a/lib/workers/pr/index.js
+++ b/lib/workers/pr/index.js
@@ -197,6 +197,11 @@ async function checkAutoMerge(pr, config, logger) {
       logger.info('Branch status is not "success"');
       return;
     }
+    // Check if it's been touched
+    if (!pr.canRebase) {
+      logger.info('PR is ready for automerge but has been modified');
+      return;
+    }
     // Let's merge this
     logger.info(`Automerging #${pr.number}`);
     await config.api.mergePr(pr);
diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js
index dd2707e671..943d9f35d8 100644
--- a/test/workers/pr/index.spec.js
+++ b/test/workers/pr/index.spec.js
@@ -50,11 +50,20 @@ describe('workers/pr', () => {
     });
     it('should automerge if enabled and pr is mergeable', async () => {
       config.automergeEnabled = true;
+      pr.canRebase = true;
       pr.mergeable = true;
       config.api.getBranchStatus.mockReturnValueOnce('success');
       await prWorker.checkAutoMerge(pr, config, logger);
       expect(config.api.mergePr.mock.calls.length).toBe(1);
     });
+    it('should not automerge if enabled and pr is mergeable but cannot rebase', async () => {
+      config.automergeEnabled = true;
+      pr.canRebase = false;
+      pr.mergeable = true;
+      config.api.getBranchStatus.mockReturnValueOnce('success');
+      await prWorker.checkAutoMerge(pr, config, logger);
+      expect(config.api.mergePr.mock.calls.length).toBe(0);
+    });
     it('should not automerge if enabled and pr is mergeable but branch status is not success', async () => {
       config.automergeEnabled = true;
       pr.mergeable = true;
-- 
GitLab