From 1195026fe644219794bcd341e149200bf0fe042d Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 22 Oct 2020 14:09:52 +0200 Subject: [PATCH] Fix handling of snapshot plugin dependencies --- CHANGELOG.md | 3 +++ .../src/main/java/sonia/scm/version/Version.java | 13 +++++++++++-- .../test/java/sonia/scm/version/VersionTest.java | 7 +++++++ .../scm/plugin/PluginInstallationVerifierTest.java | 11 +++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05ff4a8a18..544c29ae20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Centralise syntax highlighting ([#1382](https://github.com/scm-manager/scm-manager/pull/1382)) +### Fixed +- Handling of snapshot plugin dependencies ([#1384](https://github.com/scm-manager/scm-manager/pull/1384)) + ## [2.6.3] - 2020-10-16 ### Fixed - Missing default permission to manage public gpg keys ([#1377](https://github.com/scm-manager/scm-manager/pull/1377)) diff --git a/scm-core/src/main/java/sonia/scm/version/Version.java b/scm-core/src/main/java/sonia/scm/version/Version.java index c6edb05daa..a47a3ba9af 100644 --- a/scm-core/src/main/java/sonia/scm/version/Version.java +++ b/scm-core/src/main/java/sonia/scm/version/Version.java @@ -31,6 +31,8 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ComparisonChain; import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; //~--- JDK imports ------------------------------------------------------------ @@ -43,6 +45,8 @@ import java.util.Locale; public final class Version implements Comparable { + private static final Pattern MAVEN_UNIQUE_SNAPSHOT = Pattern.compile("-[0-9]{8}\\.[0-9]{6}-[0-9]+"); + /** * Constructs a new version object * @@ -388,10 +392,15 @@ public final class Version implements Comparable { String qualifier = qualifierPart.trim().toLowerCase(Locale.ENGLISH); - if (qualifier.contains("snapshot")) - { + if (qualifier.contains("snapshot")) { snapshot = true; qualifier = qualifier.replace("snapshot", ""); + } else { + Matcher matcher = MAVEN_UNIQUE_SNAPSHOT.matcher(qualifier); + if (matcher.matches()) { + snapshot = true; + qualifier = matcher.replaceAll("-"); + } } if (qualifier.length() > 0) diff --git a/scm-core/src/test/java/sonia/scm/version/VersionTest.java b/scm-core/src/test/java/sonia/scm/version/VersionTest.java index b58d355831..db96e76163 100644 --- a/scm-core/src/test/java/sonia/scm/version/VersionTest.java +++ b/scm-core/src/test/java/sonia/scm/version/VersionTest.java @@ -145,4 +145,11 @@ class VersionTest { void testUnparseable() { assertThrows(VersionParseException.class, () -> Version.parse("aaaa")); } + + @Test + void shouldDetectUniqueMavenSnapshotVersion() { + Version version = Version.parse("1.0.0-20201022.094711-15"); + assertThat(version.isSnapshot()).isTrue(); + assertThat(version).hasToString("1.0.0-SNAPSHOT"); + } } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallationVerifierTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallationVerifierTest.java index 37597c806f..791f874235 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallationVerifierTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallationVerifierTest.java @@ -144,6 +144,17 @@ class PluginInstallationVerifierTest { PluginInstallationVerifier.verify(context, descriptor); } + @Test + @SuppressWarnings("squid:S2699") // we are happy if no exception is thrown + void shouldVerifyPluginWithSnapshotDependencies() { + matchConditions(); + + PluginInstallationContext context = mockInstallationOf(IID_PLUGIN, "1.0.0-SNAPSHOT"); + mockDependingOf(IID_PLUGIN, "1.0.0-20201022.094711-15"); + + PluginInstallationVerifier.verify(context, descriptor); + } + @Test @SuppressWarnings("squid:S2699") // we are happy if no exception is thrown void shouldVerifyPluginWithOptionalDependency() {