From 1bd51a3740b3240eb15da42c7a946117d1566156 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=89tienne=20L=C3=A9vesque?=
 <etienne.levesque16@gmail.com>
Date: Mon, 18 Jan 2021 03:14:45 -0500
Subject: [PATCH] fix(hex): Preserve minor versions when in bump mode (#8326)

* feat(hex): Preserve minor versions when in bump mode

* Fix linting issue

* Add minor test

Co-authored-by: Rhys Arkins <rhys@arkins.net>
---
 lib/versioning/hex/index.spec.ts | 10 +++++++++-
 lib/versioning/hex/index.ts      | 12 +++++++++---
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts
index 03b77d3c66..b657986725 100644
--- a/lib/versioning/hex/index.spec.ts
+++ b/lib/versioning/hex/index.spec.ts
@@ -128,7 +128,15 @@ describe('lib/versioning/hex', () => {
           fromVersion: '1.2.3',
           toVersion: '2.0.7',
         })
-      ).toEqual('~> 2');
+      ).toEqual('~> 2.0');
+      expect(
+        hexScheme.getNewValue({
+          currentValue: '~> 1.2',
+          rangeStrategy: 'bump',
+          fromVersion: '1.2.3',
+          toVersion: '1.3.1',
+        })
+      ).toEqual('~> 1.3');
       expect(
         hexScheme.getNewValue({
           currentValue: '~> 1.2.0',
diff --git a/lib/versioning/hex/index.ts b/lib/versioning/hex/index.ts
index c1a6d61263..b5219e6318 100644
--- a/lib/versioning/hex/index.ts
+++ b/lib/versioning/hex/index.ts
@@ -69,10 +69,16 @@ const getNewValue = ({
     toVersion,
   });
   newSemver = npm2hex(newSemver);
-  if (/~>\s*(\d+\.\d+)$/.test(currentValue)) {
+  if (/~>\s*(\d+\.\d+\.\d+)$/.test(currentValue)) {
     newSemver = newSemver.replace(
-      /\^\s*(\d+\.\d+(\.\d)?)/,
-      (_str, p1: string) => `~> ${p1.slice(0, -2)}`
+      /[\^~]\s*(\d+\.\d+\.\d+)/,
+      (_str, p1: string) => `~> ${p1}`
+    );
+  } else if (/~>\s*(\d+\.\d+)$/.test(currentValue)) {
+    newSemver = newSemver.replace(
+      /\^\s*(\d+\.\d+)/,
+      (_str, p1: string) =>
+        `~> ${rangeStrategy !== 'bump' ? p1.slice(0, -2) : p1}`
     );
   } else {
     newSemver = newSemver.replace(/~\s*(\d+\.\d+\.\d)/, '~> $1');
-- 
GitLab