From 3a4c29215dd0395b88b0a0c2c3b86d81f7c8f786 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 5 Nov 2024 07:46:12 +0100 Subject: [PATCH] fix(versioning/poetry): use pep440 for comparisons (#32275) --- lib/modules/versioning/poetry/index.spec.ts | 41 +++++++++++++++------ lib/modules/versioning/poetry/index.ts | 8 ++-- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/lib/modules/versioning/poetry/index.spec.ts b/lib/modules/versioning/poetry/index.spec.ts index 54279366f8..faa855f4c2 100644 --- a/lib/modules/versioning/poetry/index.spec.ts +++ b/lib/modules/versioning/poetry/index.spec.ts @@ -45,17 +45,36 @@ describe('modules/versioning/poetry/index', () => { ); it.each` - a | b | expected - ${'2'} | ${'1'} | ${true} - ${'2.0'} | ${'1'} | ${true} - ${'2.0.0'} | ${'1'} | ${true} - ${'1.10.0'} | ${'1.9'} | ${true} - ${'1.9'} | ${'1.9-beta'} | ${true} - ${'1.9'} | ${'1.9a0'} | ${true} - ${'1'} | ${'1'} | ${false} - ${'1.0'} | ${'1'} | ${false} - ${'1.0.0'} | ${'1'} | ${false} - ${'1.9.0'} | ${'1.9'} | ${false} + a | b | expected + ${'2'} | ${'1'} | ${true} + ${'2.0'} | ${'1'} | ${true} + ${'2.0.0'} | ${'1'} | ${true} + ${'1.10.0'} | ${'1.9'} | ${true} + ${'1.9'} | ${'1.9-beta'} | ${true} + ${'1.9'} | ${'1.9a0'} | ${true} + ${'1'} | ${'1'} | ${false} + ${'1.0'} | ${'1'} | ${false} + ${'1.0.0'} | ${'1'} | ${false} + ${'1.9.0'} | ${'1.9'} | ${false} + ${'1.0.dev456'} | ${'1.dev0'} | ${true} + ${'1.0a1'} | ${'1.0.dev456'} | ${true} + ${'1.0a2.dev456'} | ${'1.0a1'} | ${true} + ${'1.0a12.dev456'} | ${'1.0a2.dev456'} | ${true} + ${'1.0a12'} | ${'1.0a12.dev456'} | ${true} + ${'1.0b1.dev456'} | ${'1.0a12'} | ${true} + ${'1.0b2'} | ${'1.0b1.dev456'} | ${true} + ${'1.0b2.post345.dev456'} | ${'1.0b2'} | ${true} + ${'1.0b2.post345'} | ${'1.0b2.post345.dev456'} | ${true} + ${'1.0rc1.dev456'} | ${'1.0b2.post345'} | ${true} + ${'1.0rc1'} | ${'1.0rc1.dev456'} | ${true} + ${'1.0'} | ${'1.0rc1'} | ${true} + ${'1.0+abc.5'} | ${'1.0'} | ${true} + ${'1.0+abc.7'} | ${'1.0+abc.5'} | ${true} + ${'1.0+5'} | ${'1.0+abc.7'} | ${true} + ${'1.0.post456.dev34'} | ${'1.0+5'} | ${true} + ${'1.0.post456'} | ${'1.0.post456.dev34'} | ${true} + ${'1.0.15'} | ${'1.0.post456'} | ${true} + ${'1.1.dev1'} | ${'1.0.15'} | ${true} `('isGreaterThan("$a", "$b") === $expected', ({ a, b, expected }) => { expect(versioning.isGreaterThan(a, b)).toBe(expected); }); diff --git a/lib/modules/versioning/poetry/index.ts b/lib/modules/versioning/poetry/index.ts index 02af8335d5..b6ca8440d0 100644 --- a/lib/modules/versioning/poetry/index.ts +++ b/lib/modules/versioning/poetry/index.ts @@ -2,6 +2,7 @@ import { parseRange } from 'semver-utils'; import { logger } from '../../../logger'; import type { RangeStrategy } from '../../../types/versioning'; import { api as npm } from '../npm'; +import { api as pep440 } from '../pep440'; import type { NewValueConfig, VersioningApi } from '../types'; import { VERSION_PATTERN } from './patterns'; @@ -53,9 +54,7 @@ function isVersion(input: string): boolean { } function isGreaterThan(a: string, b: string): boolean { - const semverA = poetry2semver(a); - const semverB = poetry2semver(b); - return !!(semverA && semverB && npm.isGreaterThan(semverA, semverB)); + return !!(a && b && pep440.isGreaterThan(a, b)); } function isLessThanRange(version: string, range: string): boolean { @@ -244,8 +243,7 @@ function getNewValue({ } function sortVersions(a: string, b: string): number { - // istanbul ignore next - return npm.sortVersions(poetry2semver(a) ?? '', poetry2semver(b) ?? ''); + return pep440.sortVersions(a, b); } function subset(subRange: string, superRange: string): boolean | undefined { -- GitLab