From 28a39b0c461e007d19b10ed0ab3f0c3cefedc93f Mon Sep 17 00:00:00 2001 From: Austin Burdine Date: Wed, 16 Oct 2019 08:53:03 -0400 Subject: [PATCH] fix(version): allow v2 update if on latest v1 --- lib/utils/version.js | 14 +++++++------- test/unit/utils/version-spec.js | 9 +++++++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/utils/version.js b/lib/utils/version.js index d1dfd59de..64e74b70d 100644 --- a/lib/utils/version.js +++ b/lib/utils/version.js @@ -85,7 +85,7 @@ const utils = { return parsed.version; }, - checkActiveVersion(activeVersion, latest, opts = {}) { + checkActiveVersion(activeVersion, versionToUse, latestV1, opts = {}) { const activeMajor = semver.major(activeVersion); if (opts.v1 && activeMajor > 1) { @@ -96,19 +96,19 @@ const utils = { }); } - if (semver.lte(latest, activeVersion) && !opts.force) { + if (semver.lte(versionToUse, activeVersion) && !opts.force) { return null; } - if (activeMajor === 1 && semver.diff(activeVersion, latest) === 'major') { - const latestMajor = semver.major(latest); + if (activeMajor === 1 && activeVersion !== latestV1 && semver.diff(activeVersion, versionToUse) === 'major') { + const majorToUse = semver.major(versionToUse); throw new CliError({ - message: `You are trying to update to Ghost v${latestMajor}, but your blog is not on the latest Ghost 1.0 version`, + message: `You are trying to update to Ghost v${majorToUse}, but your blog is not on the latest Ghost 1.0 version`, help: 'Instead run "ghost update --v1".' }); } - return latest; + return versionToUse; }, async resolveVersion(customVersion = null, activeVersion = null, opts = {}) { @@ -130,7 +130,7 @@ const utils = { return latest; } - return utils.checkActiveVersion(activeVersion, latest, opts); + return utils.checkActiveVersion(activeVersion, latest, versions.latestMajor.v1, opts); }, async versionFromZip(zipPath, activeVersion = null, opts = {}) { diff --git a/test/unit/utils/version-spec.js b/test/unit/utils/version-spec.js index 49d414a7f..eaf106ddb 100644 --- a/test/unit/utils/version-spec.js +++ b/test/unit/utils/version-spec.js @@ -130,7 +130,7 @@ describe('Unit: Utils: version', function () { describe('checkActiveVersion', function () { it('throws if --v1 is passed and active version is >= 2.0', function () { try { - checkActiveVersion('2.0.0', '2.1.0', {v1: true}); + checkActiveVersion('2.0.0', '2.1.0', '1.0.0', {v1: true}); } catch (error) { expect(error).to.be.an.instanceof(CliError); expect(error.message).to.contain('v2 or greater'); @@ -157,8 +157,13 @@ describe('Unit: Utils: version', function () { expect.fail('expected an error to be thrown'); }); + it('allows upgrading from v1 if on latest v1', function () { + const result = checkActiveVersion('1.0.0', '2.0.0', '1.0.0'); + expect(result).to.equal('2.0.0'); + }); + it('returns version if active === latest and --force is supplied', function () { - const result = checkActiveVersion('3.0.0', '3.0.0', {force: true}); + const result = checkActiveVersion('3.0.0', '3.0.0', '1.0.0', {force: true}); expect(result).to.equal('3.0.0'); });