From 6bf18be2bfaf4c61cecdd44fdf2929660d4ec828 Mon Sep 17 00:00:00 2001 From: Sergio Zharinov <zharinov@users.noreply.github.com> Date: Wed, 29 Jan 2020 15:23:19 +0400 Subject: [PATCH] fix: Don't modify git-tags datasource results (#5251) Co-authored-by: Jared Kauppila <Jared@Kauppi.la> --- lib/datasource/git-tags/index.ts | 2 +- lib/versioning/composer/index.ts | 11 ++++++----- lib/versioning/swift/index.ts | 10 ++++++++-- lib/versioning/swift/range.ts | 2 +- test/datasource/git-tags.spec.ts | 2 +- test/versioning/composer.spec.ts | 12 ++++++++++++ test/versioning/swift.spec.ts | 13 +++++++++++++ 7 files changed, 42 insertions(+), 10 deletions(-) diff --git a/lib/datasource/git-tags/index.ts b/lib/datasource/git-tags/index.ts index 9f62f00da5..7346469cd6 100644 --- a/lib/datasource/git-tags/index.ts +++ b/lib/datasource/git-tags/index.ts @@ -36,7 +36,7 @@ export async function getPkgReleases({ const result: ReleaseResult = { sourceUrl, releases: tags.map(tag => ({ - version: semver.isValid(tag), + version: tag, gitRef: tag, })), }; diff --git a/lib/versioning/composer/index.ts b/lib/versioning/composer/index.ts index a4a57a950f..bf7cdc5cd8 100644 --- a/lib/versioning/composer/index.ts +++ b/lib/versioning/composer/index.ts @@ -12,13 +12,14 @@ function padZeroes(input: string): string { } function composer2npm(input: string): string { - if (npm.isVersion(input)) { - return input; + const cleanInput = input.replace(/^v/, ''); + if (npm.isVersion(cleanInput)) { + return cleanInput; } - if (npm.isVersion(padZeroes(input))) { - return padZeroes(input); + if (npm.isVersion(padZeroes(cleanInput))) { + return padZeroes(cleanInput); } - let output = input; + let output = cleanInput; // ~4 to ^4 and ~4.1 to ^4.1 output = output.replace(/(?:^|\s)~([1-9][0-9]*(?:\.[0-9]*)?)(?: |$)/g, '^$1'); // ~0.4 to >=0.4 <1 diff --git a/lib/versioning/swift/index.ts b/lib/versioning/swift/index.ts index 8ec6dcc2f9..61b583bb71 100644 --- a/lib/versioning/swift/index.ts +++ b/lib/versioning/swift/index.ts @@ -24,9 +24,15 @@ export const isValid = (input: string): boolean => !!valid(input) || !!validRange(toSemverRange(input)); export const isVersion = (input: string): boolean => !!valid(input); const maxSatisfyingVersion = (versions: string[], range: string): string => - maxSatisfying(versions, toSemverRange(range)); + maxSatisfying( + versions.map(v => v.replace(/^v/, '')), + toSemverRange(range) + ); const minSatisfyingVersion = (versions: string[], range: string): string => - minSatisfying(versions, toSemverRange(range)); + minSatisfying( + versions.map(v => v.replace(/^v/, '')), + toSemverRange(range) + ); const isLessThanRange = (version: string, range: string): boolean => ltr(version, toSemverRange(range)); const matches = (version: string, range: string): boolean => diff --git a/lib/versioning/swift/range.ts b/lib/versioning/swift/range.ts index 7f15bf564f..cca8135e8b 100644 --- a/lib/versioning/swift/range.ts +++ b/lib/versioning/swift/range.ts @@ -36,7 +36,7 @@ function toSemverRange(range: string): string { function getNewValue({ currentValue, toVersion }: NewValueConfig): string { if (fromParam.test(currentValue)) { - return toVersion; + return toVersion.replace(/^v/, ''); } if (fromRange.test(currentValue)) { const [, version] = currentValue.match(fromRange); diff --git a/test/datasource/git-tags.spec.ts b/test/datasource/git-tags.spec.ts index c4a447da9b..ef6f0d3b3b 100644 --- a/test/datasource/git-tags.spec.ts +++ b/test/datasource/git-tags.spec.ts @@ -41,7 +41,7 @@ describe('datasource/git-tags', () => { lookupName, }); const result = versions.releases.map(x => x.version).sort(); - expect(result).toEqual(['0.0.1', '0.0.2']); + expect(result).toEqual(['0.0.1', 'v0.0.2']); }); }); }); diff --git a/test/versioning/composer.spec.ts b/test/versioning/composer.spec.ts index a7c3a70c63..4496b70b6f 100644 --- a/test/versioning/composer.spec.ts +++ b/test/versioning/composer.spec.ts @@ -75,6 +75,12 @@ describe('semver.maxSatisfyingVersion()', () => { '~4' ) ).toBe('4.2.0'); + expect( + semver.maxSatisfyingVersion( + ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'], + '~4' + ) + ).toBe('4.2.0'); expect( semver.maxSatisfyingVersion( ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], @@ -91,6 +97,12 @@ describe('semver.minSatisfyingVersion()', () => { '~4' ) ).toBe('4.0.0'); + expect( + semver.minSatisfyingVersion( + ['v0.4.0', 'v0.5.0', 'v4.0.0', 'v4.2.0', 'v5.0.0'], + '~4' + ) + ).toBe('4.0.0'); expect( semver.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], diff --git a/test/versioning/swift.spec.ts b/test/versioning/swift.spec.ts index 79a59835f0..64c5484007 100644 --- a/test/versioning/swift.spec.ts +++ b/test/versioning/swift.spec.ts @@ -38,6 +38,7 @@ describe('isValid(input)', () => { }); it('should support simple semver', () => { expect(isValid('1.2.3')).toBe(true); + expect(isValid('v1.2.3')).toBe(true); }); it('should support semver with dash', () => { expect(isValid('1.2.3-foo')).toBe(true); @@ -58,22 +59,34 @@ describe('isValid(input)', () => { expect( minSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"') ).toBe('1.2.3'); + expect( + minSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"') + ).toBe('1.2.3'); expect( maxSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..<"1.2.4"') ).toBe('1.2.3'); + expect( + maxSatisfyingVersion(['v1.2.3', 'v1.2.4', 'v1.2.5'], '..<"1.2.4"') + ).toBe('1.2.3'); expect( maxSatisfyingVersion(['1.2.3', '1.2.4', '1.2.5'], '..."1.2.4"') ).toBe('1.2.4'); expect(isLessThanRange('1.2.3', '..."1.2.4"')).toBe(false); + expect(isLessThanRange('v1.2.3', '..."1.2.4"')).toBe(false); expect(isLessThanRange('1.2.3', '"1.2.4"...')).toBe(true); + expect(isLessThanRange('v1.2.3', '"1.2.4"...')).toBe(true); + expect(matches('1.2.4', '..."1.2.4"')).toBe(true); + expect(matches('v1.2.4', '..."1.2.4"')).toBe(true); expect(matches('1.2.4', '..."1.2.3"')).toBe(false); + expect(matches('v1.2.4', '..."1.2.3"')).toBe(false); }); }); describe('getNewValue()', () => { it('supports range update', () => { [ ['1.2.3', 'auto', '1.2.3', '1.2.4', '1.2.3'], + ['v1.2.3', 'auto', 'v1.2.3', 'v1.2.4', 'v1.2.3'], ['from: "1.2.3"', 'auto', '1.2.3', '1.2.4', '1.2.4'], ['"1.2.3"...', 'auto', '1.2.3', '1.2.4', '"1.2.4"...'], ['"1.2.3"..."1.2.4"', 'auto', '1.2.3', '1.2.5', '"1.2.3"..."1.2.5"'], -- GitLab