From 59ea152087c22ef657b5321ede9235a652e5ee3f Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 2 Jun 2020 17:45:24 +0200
Subject: [PATCH] fix: force commit if requested or conflicted (#6411)

---
 lib/platform/common.ts                               | 1 +
 lib/platform/git/storage.ts                          | 3 ++-
 lib/workers/branch/__snapshots__/commit.spec.ts.snap | 1 +
 lib/workers/branch/commit.ts                         | 1 +
 lib/workers/branch/index.ts                          | 3 ++-
 lib/workers/common.ts                                | 2 ++
 6 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/platform/common.ts b/lib/platform/common.ts
index 79049df5fe..1238279907 100644
--- a/lib/platform/common.ts
+++ b/lib/platform/common.ts
@@ -27,6 +27,7 @@ export type CommitFilesConfig = {
   branchName: string;
   files: File[];
   message: string;
+  force?: boolean;
 };
 
 export interface GotApiOptions {
diff --git a/lib/platform/git/storage.ts b/lib/platform/git/storage.ts
index ffde548203..ff14d4c2cf 100644
--- a/lib/platform/git/storage.ts
+++ b/lib/platform/git/storage.ts
@@ -480,6 +480,7 @@ export class Storage {
     branchName,
     files,
     message,
+    force = false,
   }: CommitFilesConfig): Promise<string | null> {
     logger.debug(`Committing files to branch ${branchName}`);
     if (!this._privateKeySet) {
@@ -534,7 +535,7 @@ export class Storage {
       }
       const commitRes = await this._git.commit(message);
       const commit = commitRes?.commit || 'unknown';
-      if (!(await this.hasDiff(`origin/${branchName}`))) {
+      if (!force && !(await this.hasDiff(`origin/${branchName}`))) {
         logger.debug(
           { branchName, fileNames },
           'No file changes detected. Skipping commit'
diff --git a/lib/workers/branch/__snapshots__/commit.spec.ts.snap b/lib/workers/branch/__snapshots__/commit.spec.ts.snap
index 7f4762af4e..d67db0c47a 100644
--- a/lib/workers/branch/__snapshots__/commit.spec.ts.snap
+++ b/lib/workers/branch/__snapshots__/commit.spec.ts.snap
@@ -11,6 +11,7 @@ Array [
           "name": "package.json",
         },
       ],
+      "force": false,
       "message": "some commit message",
     },
   ],
diff --git a/lib/workers/branch/commit.ts b/lib/workers/branch/commit.ts
index 13f06692a7..68bf07eb21 100644
--- a/lib/workers/branch/commit.ts
+++ b/lib/workers/branch/commit.ts
@@ -37,5 +37,6 @@ export async function commitFilesToBranch(
     branchName: config.branchName,
     files: updatedFiles,
     message: config.commitMessage,
+    force: !!config.forceCommit,
   });
 }
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index b31ca149a2..08ce465488 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -441,7 +441,8 @@ export async function processBranch(
         logger.debug('PR has no releaseTimestamp');
       }
     }
-
+    config.forceCommit =
+      !!masterIssueCheck || config.rebaseRequested || branchPr?.isConflicted;
     const commitHash = await commitFilesToBranch(config);
     if (!commitHash && !branchExists) {
       return 'no-work';
diff --git a/lib/workers/common.ts b/lib/workers/common.ts
index b38db03d9c..4e16fc67a6 100644
--- a/lib/workers/common.ts
+++ b/lib/workers/common.ts
@@ -99,6 +99,8 @@ export interface BranchConfig
   hasTypes?: boolean;
   masterIssueChecks?: Record<string, string>;
   releaseTimestamp?: string;
+  forceCommit?: boolean;
+  rebaseRequested?: boolean;
 
   res?: ProcessBranchResult;
   upgrades: BranchUpgradeConfig[];
-- 
GitLab