From 3ad38954f0ab2beeee949318088f0a4cf23d963d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 9 Mar 2021 23:31:41 +0100
Subject: [PATCH] =?UTF-8?q?fix:=20don=E2=80=99t=20push=20empty=20commit=20?=
 =?UTF-8?q?(#9058)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lib/util/git/index.spec.ts | 20 +++++++++-----------
 lib/util/git/index.ts      |  9 +++++++++
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts
index 7ed56fcacb..1c449d709b 100644
--- a/lib/util/git/index.spec.ts
+++ b/lib/util/git/index.spec.ts
@@ -291,21 +291,19 @@ describe('platform/git', () => {
         files,
         message: 'Update something',
       });
-      expect(commit).not.toBeNull();
+      expect(commit).toBeNull();
     });
     it('does not push when no diff', async () => {
-      const branchName = 'renovate/something';
-      const local = Git(tmpDir.path);
-      await local.push('origin', `${defaultBranch}:${branchName}`);
-      await local.fetch([
-        'origin',
-        `refs/heads/${branchName}:refs/remotes/origin/${branchName}`,
-      ]);
-      const files = [];
+      const files = [
+        {
+          name: 'future_file',
+          contents: 'future',
+        },
+      ];
       const commit = await git.commitFiles({
-        branchName,
+        branchName: 'renovate/future_branch',
         files,
-        message: 'Update something',
+        message: 'No change update',
       });
       expect(commit).toBeNull();
     });
diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts
index a5bc85338c..dc54430830 100644
--- a/lib/util/git/index.ts
+++ b/lib/util/git/index.ts
@@ -655,6 +655,15 @@ export async function commitFiles({
     const commitRes = await git.commit(message, [], {
       '--no-verify': null,
     });
+    if (
+      commitRes.summary &&
+      commitRes.summary.changes === 0 &&
+      commitRes.summary.insertions === 0 &&
+      commitRes.summary.deletions === 0
+    ) {
+      logger.warn({ commitRes }, 'Detected empty commit - aborting git push');
+      return null;
+    }
     logger.debug({ result: commitRes }, `git commit`);
     const commit = commitRes?.commit || 'unknown';
     if (!force && !(await hasDiff(`origin/${branchName}`))) {
-- 
GitLab