diff --git a/lib/versioning/maven/index.js b/lib/versioning/maven/index.js index f34f5fd2887de4b5a43d6b22df36b737ce4f16ab..1ef505e3557414dd3dac14300f51cf4773e0cfbe 100644 --- a/lib/versioning/maven/index.js +++ b/lib/versioning/maven/index.js @@ -102,13 +102,21 @@ const isStable = version => { return null; }; -const maxSatisfyingVersion = (versions, range) => - versions.find(version => matches(version, range)); +const maxSatisfyingVersion = (versions, range) => { + return versions.reduce((result, version) => { + if (matches(version, range)) { + if (!result) return version; + if (isGreaterThan(version, result)) return version; + } + return result; + }, null); +}; function getNewValue(currentValue, rangeStrategy, fromVersion, toVersion) { - return isVersion(currentValue) - ? toVersion - : autoExtendMavenRange(currentValue, toVersion); + if (isVersion(currentValue) || rangeStrategy === 'pin') { + return toVersion; + } + return autoExtendMavenRange(currentValue, toVersion); } module.exports = { diff --git a/test/versioning/maven.spec.js b/test/versioning/maven.spec.js index 43e6caf11824eea4cde074195c61e81a5e28e69f..9537ea58039c35c1a083ffdfcfae6966da946bcf 100644 --- a/test/versioning/maven.spec.js +++ b/test/versioning/maven.spec.js @@ -12,6 +12,7 @@ const { getMinor, getPatch, matches, + getNewValue, } = require('../../lib/versioning/maven/index'); describe('versioning/maven/compare', () => { @@ -326,4 +327,24 @@ describe('versioning/maven/index', () => { expect(matches('1.0.0.RC9.2', '(,1.0.0.RC9.2),(1.0.0.RC9.2,)')).toBe(false); expect(matches('1.0.0-RC14', '(,1.0.0.RC9.2),(1.0.0.RC9.2,)')).toBe(true); }); + it('pins maven ranges', () => { + const sample = [ + ['[1.2.3]', '1.2.3', '1.2.4'], + ['[1.0.0,1.2.3]', '1.0.0', '1.2.4'], + ['[1.0.0,1.2.23]', '1.0.0', '1.2.23'], + ['(,1.0]', '0.0.1', '2.0'], + ['],1.0]', '0.0.1', '2.0'], + ['(,1.0)', '0.1', '2.0'], + ['],1.0[', '2.0', '],2.0['], + ['[1.0,1.2],[1.3,1.5)', '1.0', '1.2.4'], + ['[1.0,1.2],[1.3,1.5[', '1.0', '1.2.4'], + ['[1.2.3,)', '1.2.3', '1.2.4'], + ['[1.2.3,[', '1.2.3', '1.2.4'], + ]; + sample.forEach(([currentValue, fromVersion, toVersion]) => { + expect(getNewValue(currentValue, 'pin', fromVersion, toVersion)).toEqual( + toVersion + ); + }); + }); });