From 7c721565628ceb1dfa59e1c5e183ad7c308b1e26 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Wed, 15 Nov 2017 13:39:44 +0100
Subject: [PATCH] refactor: move semantic commit detection from init to later
 updates (#1170)

---
 lib/workers/repository/init/apis.js                       | 2 --
 lib/workers/repository/updates/determine.js               | 7 +++++++
 lib/workers/repository/{init => updates}/semantic.js      | 6 +++---
 .../workers/repository/{init => updates}/semantic.spec.js | 8 ++++----
 4 files changed, 14 insertions(+), 9 deletions(-)
 rename lib/workers/repository/{init => updates}/semantic.js (83%)
 rename test/workers/repository/{init => updates}/semantic.spec.js (82%)

diff --git a/lib/workers/repository/init/apis.js b/lib/workers/repository/init/apis.js
index 5433ace659..2f6e0d25ce 100644
--- a/lib/workers/repository/init/apis.js
+++ b/lib/workers/repository/init/apis.js
@@ -1,5 +1,4 @@
 const { initPlatform } = require('../../../platform');
-const { detectSemanticCommits } = require('./semantic');
 const npmApi = require('../../../manager/npm/registry');
 
 function assignPlatform(config) {
@@ -25,7 +24,6 @@ async function initApis(input, token) {
   npmApi.setNpmrc(config.npmrc);
   config = await assignPlatform(config);
   config = await getPlatformConfig(config);
-  config = await detectSemanticCommits(config);
   return config;
 }
 
diff --git a/lib/workers/repository/updates/determine.js b/lib/workers/repository/updates/determine.js
index 67b3eeaf1c..bf83e2fa94 100644
--- a/lib/workers/repository/updates/determine.js
+++ b/lib/workers/repository/updates/determine.js
@@ -1,5 +1,6 @@
 const packageFileWorker = require('../../package-file');
 const { mergeChildConfig, filterConfig } = require('../../../config');
+const { detectSemanticCommits } = require('./semantic');
 
 async function determineRepoUpgrades(config) {
   logger.debug('determineRepoUpgrades()');
@@ -31,9 +32,14 @@ async function determineRepoUpgrades(config) {
       );
     }
   }
+  let semanticCommits;
+  if (upgrades.length) {
+    semanticCommits = await detectSemanticCommits(config);
+  }
   // Sanitize depNames
   upgrades = upgrades.map(upgrade => ({
     ...upgrade,
+    semanticCommits,
     depNameSanitized: upgrade.depName
       ? upgrade.depName
           .replace('@', '')
@@ -41,6 +47,7 @@ async function determineRepoUpgrades(config) {
           .toLowerCase()
       : undefined,
   }));
+
   logger.debug('returning upgrades');
   return { ...config, upgrades };
 }
diff --git a/lib/workers/repository/init/semantic.js b/lib/workers/repository/updates/semantic.js
similarity index 83%
rename from lib/workers/repository/init/semantic.js
rename to lib/workers/repository/updates/semantic.js
index 1f5603caa7..bc00d9a934 100644
--- a/lib/workers/repository/init/semantic.js
+++ b/lib/workers/repository/updates/semantic.js
@@ -2,19 +2,19 @@ const conventionalCommitsDetector = require('conventional-commits-detector');
 
 async function detectSemanticCommits(config) {
   if (config.semanticCommits !== null) {
-    return config;
+    return config.semanticCommits;
   }
   const commitMessages = await platform.getCommitMessages();
   logger.trace(`commitMessages=${JSON.stringify(commitMessages)}`);
   const type = conventionalCommitsDetector(commitMessages);
   if (type === 'unknown') {
     logger.debug('No semantic commit type found');
-    return { ...config, semanticCommits: false };
+    return false;
   }
   logger.debug(
     `Found semantic commit type ${type} - enabling semantic commits`
   );
-  return { ...config, semanticCommits: true };
+  return true;
 }
 
 module.exports = {
diff --git a/test/workers/repository/init/semantic.spec.js b/test/workers/repository/updates/semantic.spec.js
similarity index 82%
rename from test/workers/repository/init/semantic.spec.js
rename to test/workers/repository/updates/semantic.spec.js
index d8ee66a72b..814814b095 100644
--- a/test/workers/repository/init/semantic.spec.js
+++ b/test/workers/repository/updates/semantic.spec.js
@@ -8,26 +8,26 @@ beforeEach(() => {
 
 const {
   detectSemanticCommits,
-} = require('../../../../lib/workers/repository/init/semantic');
+} = require('../../../../lib/workers/repository/updates/semantic');
 
 describe('workers/repository/init/semantic', () => {
   describe('detectSemanticCommits()', () => {
     it('returns config if already set', async () => {
       config.semanticCommits = true;
       const res = await detectSemanticCommits(config);
-      expect(res).toBe(config);
+      expect(res).toBe(true);
     });
     it('detects false if unknown', async () => {
       config.semanticCommits = null;
       platform.getCommitMessages.mockReturnValue(['foo', 'bar']);
       const res = await detectSemanticCommits(config);
-      expect(res.semanticCommits).toBe(false);
+      expect(res).toBe(false);
     });
     it('detects true if known', async () => {
       config.semanticCommits = null;
       platform.getCommitMessages.mockReturnValue(['fix: foo', 'refactor: bar']);
       const res = await detectSemanticCommits(config);
-      expect(res.semanticCommits).toBe(true);
+      expect(res).toBe(true);
     });
   });
 });
-- 
GitLab