Skip to content

Commit 9af797d

Browse files
committed
refactor(model): Factor out getVersionRange()
Prepare for re-use in an upcoming change. While at at, stop logging an error in case of an empty range list, because there are valid version strings which are not version ranges but contain a "version range indicator", such as `Crate::wasi:0.13.3+wasi-0.2.2`. Signed-off-by: Frank Viernau <[email protected]>
1 parent be9a8db commit 9af797d

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

model/src/main/kotlin/utils/VersionUtils.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@
1818
*/
1919
package org.ossreviewtoolkit.model.utils
2020

21-
import kotlin.collections.isNotEmpty
22-
2321
import org.apache.logging.log4j.kotlin.logger
2422

2523
import org.ossreviewtoolkit.model.Identifier
2624
import org.ossreviewtoolkit.utils.ort.showStackTrace
2725

26+
import org.semver4j.RangesList
2827
import org.semver4j.RangesListFactory
2928
import org.semver4j.Semver
3029

@@ -41,18 +40,11 @@ internal fun Identifier.isApplicableIvyVersion(pkgId: Identifier) =
4140
runCatching {
4241
if (version == pkgId.version) return true
4342

44-
if (isVersionRange()) {
45-
// `Semver.satisfies(String)` requires a valid version range to work as expected, see:
46-
// https://github.com/semver4j/semver4j/issues/132.
47-
val range = RangesListFactory.create(version)
48-
require(range.get().isNotEmpty()) {
49-
"'$version' is not a valid version range."
50-
}
51-
52-
return Semver.coerce(pkgId.version)?.satisfies(range) == true
53-
}
43+
// `Semver.satisfies(String)` requires a valid version range to work as expected, see:
44+
// https://github.com/semver4j/semver4j/issues/132.
45+
val range = getVersionRange() ?: return false
5446

55-
return false
47+
return Semver.coerce(pkgId.version)?.satisfies(range) == true
5648
}.onFailure {
5749
logger.warn {
5850
"Failed to check if identifier version '$version' is applicable to package version " +
@@ -63,3 +55,11 @@ internal fun Identifier.isApplicableIvyVersion(pkgId: Identifier) =
6355
}.getOrDefault(false)
6456

6557
internal fun Identifier.isVersionRange() = IVY_VERSION_RANGE_INDICATORS.any { version.contains(it, ignoreCase = true) }
58+
59+
private fun Identifier.getVersionRange(): RangesList? {
60+
if (IVY_VERSION_RANGE_INDICATORS.none { version.contains(it, ignoreCase = true) }) return null
61+
62+
return runCatching {
63+
RangesListFactory.create(version).takeUnless { it.get().isEmpty() }
64+
}.getOrNull()
65+
}

0 commit comments

Comments
 (0)