diff options
author | jonmv <venstad@gmail.com> | 2022-04-20 08:28:37 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-04-20 08:31:31 +0200 |
commit | a539f34d4e1788183484b17b38a7cb6339f2386d (patch) | |
tree | 2c4e56fbf72f2e13033d05656709d9fc72443171 /vespa-application-maven-plugin | |
parent | 1123977d8bc6a8fe4ca420eb102657bf034ff631 (diff) |
Revert "Merge pull request #22155 from vespa-engine/revert-22124-jonmv/require-compile-version-leq-parent"
This reverts commit ddd16fd9efba8428e0d62430550e8741dcf696b8, reversing
changes made to d6ac310e295206ec2f88a9a3c8d2a0ebbbb46b37.
Diffstat (limited to 'vespa-application-maven-plugin')
3 files changed, 119 insertions, 3 deletions
diff --git a/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java index 1bbdfc9914a..5873db262d9 100644 --- a/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java +++ b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/ApplicationMojo.java @@ -59,11 +59,16 @@ public class ApplicationMojo extends AbstractMojo { if ( ! applicationDestination.exists()) return; - if (vespaversion == null) // Get the build version of the parent project unless specifically set. - vespaversion = project.getProperties().getProperty("vespaversion"); + // Compile version is the build version of the parent project, unless specifically set. + MavenProject parent = project; + while (parent.getParent() != null) parent = parent.getParent(); + Version parentVersion = Version.from(parent.getVersion()); + Version compileVersion = vespaversion == null ? parentVersion : Version.from(vespaversion); + if (parentVersion.compareTo(compileVersion) < 0) + throw new IllegalArgumentException("compile version (" + compileVersion + ") cannot be higher than parent version (" + parentVersion + ")"); String metaData = String.format("{\"compileVersion\": \"%s\",\n \"buildTime\": %d}", - vespaversion, + compileVersion, System.currentTimeMillis()); try { Files.write(applicationDestination.toPath().resolve("build-meta.json"), diff --git a/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java new file mode 100644 index 00000000000..050871043ca --- /dev/null +++ b/vespa-application-maven-plugin/src/main/java/com/yahoo/container/plugin/mojo/Version.java @@ -0,0 +1,80 @@ +package com.yahoo.container.plugin.mojo; + +import java.util.Comparator; +import java.util.Objects; + +import static java.lang.Integer.min; +import static java.lang.Integer.parseInt; + +/** + * @author jonmv + */ +public class Version implements Comparable<Version> { + + private static final Comparator<Version> comparator = Comparator.comparingInt(Version::major) + .thenComparing(Version::isSnapshot) + .thenComparing(Version::minor) + .thenComparing(Version::micro); + + private final int major; + private final int minor; + private final int micro; + private final boolean snapshot; + + private Version(int major, int minor, int micro, boolean snapshot) { + if (major < 0 || minor < 0 || micro < 0) throw new IllegalArgumentException("version numbers must all be non-negative"); + this.major = major; + this.minor = minor; + this.micro = micro; + this.snapshot = snapshot; + } + + public static Version of(int major, int minor, int micro) { + return new Version(major, minor, micro, false); + } + + public static Version ofSnapshot(int major) { + return new Version(major, 0, 0, true); + } + + public static Version from(String version) { + if (version.endsWith("-SNAPSHOT")) { + String[] parts = version.split("-"); + if (parts.length != 2) throw new IllegalArgumentException("snapshot version must only specify major, e.g., \"1-SNAPSHOT\""); + return ofSnapshot(parseInt(parts[0])); + } + String[] parts = version.split("\\."); + if (parts.length != 3) throw new IllegalArgumentException("release versions must specify major, minor and micro, separated by '.', e.g., \"1.2.0\""); + return of(parseInt(parts[0]), parseInt(parts[1]), parseInt(parts[2])); + } + + public int major() { return major; } + public int minor() { return minor; } + public int micro() { return micro; } + public boolean isSnapshot() { return snapshot; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Version version = (Version) o; + return major == version.major && minor == version.minor && micro == version.micro && snapshot == version.snapshot; + } + + @Override + public int hashCode() { + return Objects.hash(major, minor, micro, snapshot); + } + + /** Snapshots sort last within their major, and sorting is on major, then minor, then micro otherwise. */ + @Override + public int compareTo(Version other) { + return comparator.compare(this, other); + } + + @Override + public String toString() { + return isSnapshot() ? major + "-SNAPSHOT" : major + "." + minor + "." + micro; + } + +} diff --git a/vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java b/vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java new file mode 100644 index 00000000000..ed31f43d081 --- /dev/null +++ b/vespa-application-maven-plugin/src/test/java/com/yahoo/container/plugin/mojo/VersionTest.java @@ -0,0 +1,31 @@ +package com.yahoo.container.plugin.mojo; + +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +/** + * @author jonmv + */ +public class VersionTest { + + @Test + public void test() { + assertEquals("1.2.0", Version.from("1.2.0").toString()); + assertEquals("3-SNAPSHOT", Version.from("3-SNAPSHOT").toString()); + + List<Version> versions = List.of(Version.of(1, 2, 3), + Version.of(1, 2, 4), + Version.of(1, 3, 2), + Version.ofSnapshot(1), + Version.of(2, 1, 0)); + + for (int i = 0; i < versions.size(); i++) + for (int j = 0; j < versions.size(); j++) + assertEquals(versions.get(i) + " should be less than " + versions.get(j), + Integer.compare(i, j), versions.get(i).compareTo(versions.get(j))); + } + +} |