From acb29ed2b05037a69de72aed05b3f6640aa25abc Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Tue, 3 Jul 2018 14:13:30 +0300 Subject: [PATCH] Fix comparing pre-release numbers (PY-27350) --- .../python/packaging/PyPackageVersionComparator.kt | 11 ++++------- .../packaging/PyPackageVersionComparatorTest.kt | 4 ++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/python/src/com/jetbrains/python/packaging/PyPackageVersionComparator.kt b/python/src/com/jetbrains/python/packaging/PyPackageVersionComparator.kt index d609d617226d..776f863413b5 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageVersionComparator.kt +++ b/python/src/com/jetbrains/python/packaging/PyPackageVersionComparator.kt @@ -55,15 +55,13 @@ object PyPackageVersionComparator : Comparator { /** * @see PyPackageVersionNormalizer.normalizeEpoch */ - private fun compareEpochs(o1: PyPackageVersion, o2: PyPackageVersion) = compareAsInts( - o1.epoch ?: "0", o2.epoch ?: "0") + private fun compareEpochs(o1: PyPackageVersion, o2: PyPackageVersion) = compareAsInts(o1.epoch ?: "0", o2.epoch ?: "0") /** * @see PyPackageVersionNormalizer.normalizeRelease */ private fun compareReleases(o1: PyPackageVersion, o2: PyPackageVersion): PyRequirementRelation { - for ((releasePart1, releasePart2) in zipLongest(o1.release.split('.'), - o2.release.split('.'), "0")) { + for ((releasePart1, releasePart2) in zipLongest(o1.release.split('.'), o2.release.split('.'), "0")) { if (releasePart1 == "*" || releasePart2 == "*") return PyRequirementRelation.COMPATIBLE val releaseParts = compareAsInts(releasePart1, releasePart2) @@ -90,8 +88,7 @@ object PyPackageVersionComparator : Comparator { * @see PyPackageVersionNormalizer.normalizePost */ private fun comparePosts(o1: PyPackageVersion, o2: PyPackageVersion): Int { - return compareAsInts(o1.post?.substring(4) ?: "-1", - o2.post?.substring(4) ?: "-1") + return compareAsInts(o1.post?.substring(4) ?: "-1", o2.post?.substring(4) ?: "-1") } /** @@ -111,7 +108,7 @@ object PyPackageVersionComparator : Comparator { val preTypes = preType1.compareTo(preType2) if (preTypes != 0) return preTypes - return pre1.substring(preType1.length).compareTo(pre2.substring(preType2.length)) + return compareAsInts(pre1.substring(preType1.length), pre2.substring(preType2.length)) } /** diff --git a/python/testSrc/com/jetbrains/python/packaging/PyPackageVersionComparatorTest.kt b/python/testSrc/com/jetbrains/python/packaging/PyPackageVersionComparatorTest.kt index 26cc10868bef..367dee482915 100644 --- a/python/testSrc/com/jetbrains/python/packaging/PyPackageVersionComparatorTest.kt +++ b/python/testSrc/com/jetbrains/python/packaging/PyPackageVersionComparatorTest.kt @@ -42,6 +42,10 @@ class PyPackageVersionComparatorTest : PyTestCase() { check(normalize("1.2a1"), normalize("1.2a1"), normalize("1.2a2")) + + check(normalize("1.2a2"), + normalize("1.2a2"), + normalize("1.2a10")) } fun testDev() {