From ec53ef78e92181a3282778cc10f0cd49c341bbd8 Mon Sep 17 00:00:00 2001 From: Ayoub Kaanich <kayoub5@live.com> Date: Sun, 3 Jun 2018 18:08:15 +0200 Subject: [PATCH] refactor: lookup use versioning wrapper --- lib/versioning/semver/index.js | 12 +++---- .../repository/process/lookup/filter.js | 18 +++++----- .../repository/process/lookup/index.js | 31 +++++++++-------- .../repository/process/lookup/rollback.js | 22 ++++++++----- .../__snapshots__/index.spec.js.snap | 14 -------- .../lookup/__snapshots__/index.spec.js.snap | 33 +++++++++++++++++++ .../repository/process/lookup/index.spec.js | 15 +++++++++ 7 files changed, 95 insertions(+), 50 deletions(-) diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js index e4328fc926..87aa711870 100644 --- a/lib/versioning/semver/index.js +++ b/lib/versioning/semver/index.js @@ -12,6 +12,9 @@ const { satisfies: matches, valid: isPinnedVersion, validRange, + ltr: isLessThanRange, + gt: isGreaterThan, + eq: equals, } = semver; const padRange = range => range + '.0'.repeat(3 - range.split('.').length); @@ -26,17 +29,12 @@ const isRange = input => isValid(input) && !isPinnedVersion(input); // If this is left as an alias, inputs like "17.04.0" throw errors const isValid = input => validRange(input); -const isLessThan = (version, base) => - isPinnedVersion(base) ? semver.lt(version, base) : semver.ltr(version, base); - -const isGreaterThan = (version, base) => - isPinnedVersion(base) ? semver.gt(version, base) : semver.gtr(version, base); - module.exports = { + equals, getMajor, getMinor, isGreaterThan, - isLessThan, + isLessThanRange, isPinnedVersion, isRange, isStable, diff --git a/lib/workers/repository/process/lookup/filter.js b/lib/workers/repository/process/lookup/filter.js index 3a09eff2bf..0ead9b86a7 100644 --- a/lib/workers/repository/process/lookup/filter.js +++ b/lib/workers/repository/process/lookup/filter.js @@ -1,17 +1,19 @@ -const { - getMajor, - isGreaterThan, - isStable, - isValid, - matches, -} = require('../../../../versioning/semver'); +const versioning = require('../../../../versioning'); module.exports = { filterVersions, }; function filterVersions(config, fromVersion, latestVersion, versions) { - const { ignoreUnstable, respectLatest, allowedVersions } = config; + const { + versionScheme, + ignoreUnstable, + respectLatest, + allowedVersions, + } = config; + const { getMajor, isGreaterThan, isStable, isValid, matches } = versioning( + versionScheme + ); if (!fromVersion) { return []; } diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js index 2e42480f44..33f5a8dd40 100644 --- a/lib/workers/repository/process/lookup/index.js +++ b/lib/workers/repository/process/lookup/index.js @@ -1,4 +1,4 @@ -const versioning = require('../../../../versioning/semver'); +const versioning = require('../../../../versioning'); const moment = require('moment'); const { getRollbackUpdate } = require('./rollback'); const { getRangeStrategy } = require('../../../../manager'); @@ -7,23 +7,20 @@ const npmApi = require('../../../../datasource/npm'); const github = require('../../../../datasource/github'); const { parse } = require('../../../../../lib/util/purl'); -const { - getMajor, - getMinor, - isGreaterThan, - isRange, - matches, - maxSatisfyingVersion, - minSatisfyingVersion, - rangify, -} = versioning; - module.exports = { lookupUpdates, }; async function lookupUpdates(config) { - const { depName, currentVersion, lockedVersion } = config; + const { versionScheme, depName, currentVersion, lockedVersion } = config; + const { + getMajor, + getMinor, + isGreaterThan, + isRange, + matches, + rangify, + } = versioning(versionScheme); logger.debug({ depName, currentVersion }, 'lookupUpdates'); let dependency; const purl = parse(config.purl); @@ -77,6 +74,7 @@ async function lookupUpdates(config) { } const rangeStrategy = getRangeStrategy(config); const fromVersion = getFromVersion( + config, currentVersion, rangeStrategy, lockedVersion, @@ -143,6 +141,8 @@ async function lookupUpdates(config) { } function getType(config, fromVersion, toVersion) { + const { versionScheme } = config; + const { getMajor, getMinor } = versioning(versionScheme); if (getMajor(toVersion) > getMajor(fromVersion)) { return 'major'; } @@ -176,11 +176,16 @@ function getBucket(config, update) { } function getFromVersion( + config, currentVersion, rangeStrategy, lockedVersion, allVersions ) { + const { versionScheme } = config; + const { isRange, maxSatisfyingVersion, minSatisfyingVersion } = versioning( + versionScheme + ); if (!isRange(currentVersion)) { return currentVersion; } diff --git a/lib/workers/repository/process/lookup/rollback.js b/lib/workers/repository/process/lookup/rollback.js index baf41cc2be..ee3b99b6e7 100644 --- a/lib/workers/repository/process/lookup/rollback.js +++ b/lib/workers/repository/process/lookup/rollback.js @@ -1,18 +1,24 @@ -const { - getMajor, - isLessThan, - rangify, - sortVersions, -} = require('../../../../versioning/semver'); +const versioning = require('../../../../versioning'); module.exports = { getRollbackUpdate, }; function getRollbackUpdate(config, versions) { - const { packageFile, depName, currentVersion } = config; + const { packageFile, versionScheme, depName, currentVersion } = config; + const { getMajor, isLessThanRange, rangify, sortVersions } = versioning( + versionScheme + ); + // istanbul ignore if + if (!isLessThanRange) { + logger.info( + { versionScheme }, + 'Current version scheme does not suppot isLessThanRange()' + ); + return []; + } const lessThanVersions = versions.filter(version => - isLessThan(version, currentVersion) + isLessThanRange(version, currentVersion) ); // istanbul ignore if if (!lessThanVersions.length) { diff --git a/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap b/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap index 8cc701bba7..308642846f 100644 --- a/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap +++ b/test/workers/branch/lock-files/__snapshots__/index.spec.js.snap @@ -13,17 +13,3 @@ Object { "updatedLockFiles": Array [], } `; - -exports[`manager/npm/post-update getAdditionalFiles returns no error and empty lockfiles if lock file maintenance exists 1`] = ` -Object { - "lockFileErrors": Array [], - "updatedLockFiles": Array [], -} -`; - -exports[`manager/npm/post-update getAdditionalFiles returns no error and empty lockfiles if updateLockFiles false 1`] = ` -Object { - "lockFileErrors": Array [], - "updatedLockFiles": Array [], -} -`; 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 17a00d9906..301e79ade4 100644 --- a/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap +++ b/test/workers/repository/process/lookup/__snapshots__/index.spec.js.snap @@ -38,6 +38,39 @@ Array [ ] `; +exports[`manager/npm/lookup .lookupUpdates() handles PEP440 1`] = ` +Array [ + Object { + "isPin": true, + "newVersion": "0.9.4", + "newVersionMajor": 0, + "repositoryUrl": "https://github.com/kriskowal/q", + "type": "pin", + "unpublishable": false, + }, + Object { + "fromVersion": "0.9.4", + "newVersion": "0.9.7", + "newVersionMajor": 0, + "newVersionMinor": 9, + "repositoryUrl": "https://github.com/kriskowal/q", + "toVersion": "0.9.7", + "type": "minor", + "unpublishable": false, + }, + Object { + "fromVersion": "0.9.4", + "newVersion": "1.4.1", + "newVersionMajor": 1, + "newVersionMinor": 4, + "repositoryUrl": "https://github.com/kriskowal/q", + "toVersion": "1.4.1", + "type": "major", + "unpublishable": false, + }, +] +`; + exports[`manager/npm/lookup .lookupUpdates() handles github 404 1`] = ` Array [ Object { diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js index 4083507580..07f8ec837e 100644 --- a/test/workers/repository/process/lookup/index.spec.js +++ b/test/workers/repository/process/lookup/index.spec.js @@ -810,5 +810,20 @@ describe('manager/npm/lookup', () => { config.currentVersion = '1.0.0'; expect(await lookup.lookupUpdates(config)).toMatchSnapshot(); }); + it('handles PEP440', async () => { + config.manager = 'pip_requirements'; + config.versionScheme = 'pep440'; + config.rangeStrategy = 'pin'; + config.lockedVersion = '0.9.4'; + config.currentVersion = '~=0.9'; + config.depName = 'q'; + // TODO: we are using npm as source, since purl for pypi is not implimented + config.purl = 'pkg:npm/q'; + nock('https://registry.npmjs.org') + .get('/q') + .reply(200, qJson); + const res = await lookup.lookupUpdates(config); + expect(res).toMatchSnapshot(); + }); }); }); -- GitLab