diff --git a/lib/versioning/poetry/index.spec.ts b/lib/versioning/poetry/index.spec.ts index 2b2ee1aa4a52c99d66e40a2ac313a898f8619158..9df065233a14b9a2529657a36493f5757e356291 100644 --- a/lib/versioning/poetry/index.spec.ts +++ b/lib/versioning/poetry/index.spec.ts @@ -300,6 +300,16 @@ describe(getName(__filename), () => { }) ).toEqual('^2.0.0'); }); + it('handles precision change caret', () => { + expect( + versionig.getNewValue({ + currentValue: '^5.0.3', + rangeStrategy: 'replace', + currentVersion: '5.3.1', + newVersion: '5.5', + }) + ).toEqual('^5.0.3'); + }); it('replaces naked version', () => { expect( versionig.getNewValue({ diff --git a/lib/versioning/poetry/index.ts b/lib/versioning/poetry/index.ts index 219f3658e2d827495af177129f57b7c4879006c2..15daa8434fe6dd83456821260b5de707c2cc8b32 100644 --- a/lib/versioning/poetry/index.ts +++ b/lib/versioning/poetry/index.ts @@ -1,4 +1,5 @@ import { parseRange } from 'semver-utils'; +import { logger } from '../../logger'; import { api as npm } from '../npm'; import type { NewValueConfig, VersioningApi } from '../types'; @@ -130,6 +131,20 @@ function getNewValue({ }: NewValueConfig): string { if (rangeStrategy === 'replace') { const npmCurrentValue = poetry2npm(currentValue); + try { + const massagedNewVersion = padZeroes(newVersion); + if ( + npm.isVersion(massagedNewVersion) && + npm.matches(massagedNewVersion, npmCurrentValue) + ) { + return currentValue; + } + } catch (err) /* istanbul ignore next */ { + logger.info( + { err }, + 'Poetry versioning: Error caught checking if newVersion satisfies currentValue' + ); + } const parsedRange = parseRange(npmCurrentValue); const element = parsedRange[parsedRange.length - 1]; if (parsedRange.length === 1 && element.operator) {