From 9555b27d9e47ea85f7c2e96976bfc96ec96c8135 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Wed, 25 Jul 2018 08:58:17 +0200
Subject: [PATCH] fix(lookup): use major/minor/patch updateType instead of bump

Helps https://github.com/renovatebot/config-help/issues/67 and https://github.com/renovatebot/config-help/issues/70#issuecomment-407595535
---
 lib/util/package-rules.js                     |  5 +++-
 .../repository/process/lookup/index.js        | 13 +++++++++
 .../lookup/__snapshots__/index.spec.js.snap   | 27 ++++++++++++++++---
 .../repository/process/lookup/index.spec.js   | 10 +++++++
 4 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/lib/util/package-rules.js b/lib/util/package-rules.js
index ae27459df2..eecdbeb4e4 100644
--- a/lib/util/package-rules.js
+++ b/lib/util/package-rules.js
@@ -17,6 +17,7 @@ function applyPackageRules(inputConfig) {
     currentValue,
     fromVersion,
     updateType,
+    isBump,
   } = config;
   const packageRules = config.packageRules || [];
   logger.trace(
@@ -66,7 +67,9 @@ function applyPackageRules(inputConfig) {
       negativeMatch = negativeMatch || !isMatch;
     }
     if (updateTypes.length) {
-      const isMatch = updateTypes.includes(updateType);
+      const isMatch =
+        updateTypes.includes(updateType) ||
+        (isBump && updateTypes.includes('bump'));
       positiveMatch = positiveMatch || isMatch;
       negativeMatch = negativeMatch || !isMatch;
     }
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 54205c6d6a..32ce512ff5 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -190,6 +190,19 @@ async function lookupUpdates(config) {
       }
     }
   }
+  for (const update of res.updates) {
+    const { updateType, fromVersion, toVersion } = update;
+    if (updateType === 'bump') {
+      update.isBump = true;
+      if (getMajor(toVersion) > getMajor(fromVersion)) {
+        update.updateType = 'major';
+      } else if (getMinor(toVersion) > getMinor(fromVersion)) {
+        update.updateType = 'minor';
+      } else {
+        update.updateType = 'patch';
+      }
+    }
+  }
   // Strip out any non-changed ones
   res.updates = res.updates
     .filter(update => update.newDigest !== null)
diff --git a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap
index 2b079c4146..e8bd7a702f 100644
--- a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap
+++ b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap
@@ -819,6 +819,7 @@ Array [
   Object {
     "canBeUnpublished": false,
     "fromVersion": "1.0.0",
+    "isBump": true,
     "isRange": true,
     "isSingleVersion": false,
     "newMajor": 1,
@@ -826,7 +827,7 @@ Array [
     "newValue": "^1.4.1",
     "releaseTimestamp": "2015-05-17T04:25:07.299Z",
     "toVersion": "1.4.1",
-    "updateType": "bump",
+    "updateType": "minor",
   },
 ]
 `;
@@ -836,6 +837,7 @@ Array [
   Object {
     "canBeUnpublished": false,
     "fromVersion": "1.0.0",
+    "isBump": true,
     "isRange": true,
     "isSingleVersion": false,
     "newMajor": 1,
@@ -843,7 +845,7 @@ Array [
     "newValue": ">=1.4.1",
     "releaseTimestamp": "2015-05-17T04:25:07.299Z",
     "toVersion": "1.4.1",
-    "updateType": "bump",
+    "updateType": "minor",
   },
 ]
 `;
@@ -853,6 +855,7 @@ Array [
   Object {
     "canBeUnpublished": false,
     "fromVersion": "1.0.0",
+    "isBump": true,
     "isRange": true,
     "isSingleVersion": false,
     "newMajor": 1,
@@ -860,7 +863,7 @@ Array [
     "newValue": "~1.0.1",
     "releaseTimestamp": "2014-03-11T18:47:17.560Z",
     "toVersion": "1.0.1",
-    "updateType": "bump",
+    "updateType": "patch",
   },
   Object {
     "canBeUnpublished": false,
@@ -877,6 +880,24 @@ Array [
 ]
 `;
 
+exports[`manager/npm/lookup .lookupUpdates() supports majorgte updates 1`] = `
+Array [
+  Object {
+    "canBeUnpublished": false,
+    "fromVersion": "0.9.0",
+    "isBump": true,
+    "isRange": true,
+    "isSingleVersion": false,
+    "newMajor": 1,
+    "newMinor": 4,
+    "newValue": ">=1.4.1",
+    "releaseTimestamp": "2015-05-17T04:25:07.299Z",
+    "toVersion": "1.4.1",
+    "updateType": "major",
+  },
+]
+`;
+
 exports[`manager/npm/lookup .lookupUpdates() supports minor and major upgrades for ranged versions 1`] = `
 Array [
   Object {
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index 98f1822ed1..7be07b707d 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -756,6 +756,16 @@ describe('manager/npm/lookup', () => {
         .reply(200, qJson);
       expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot();
     });
+    it('supports majorgte updates', async () => {
+      config.rangeStrategy = 'bump';
+      config.currentValue = '>=0.9.0';
+      config.depName = 'q';
+      config.purl = 'pkg:npm/q';
+      nock('https://registry.npmjs.org')
+        .get('/q')
+        .reply(200, qJson);
+      expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot();
+    });
     it('rejects in-range unsupported operator', async () => {
       config.rangeStrategy = 'bump';
       config.currentValue = '>1.0.0';
-- 
GitLab