aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2018-12-18 13:40:37 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2018-12-19 11:27:41 +0100
commitf816fb18daad6ac5180d331c3fe041f0e33a253e (patch)
tree9c2cad4363824150d66fe8da329a1c4c168fd31f /controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
parentc6dd8b5a3c1c9aff65df402f0fd7c77bd3de74e9 (diff)
Add author email to ApplicationVersion, and store it with submissions
Diffstat (limited to 'controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java28
1 files changed, 22 insertions, 6 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
index 0e14be29fc5..eaa105875d1 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
@@ -17,30 +17,41 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
* Used in cases where application version cannot be determined, such as manual deployments (e.g. in dev
* environment)
*/
- public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty());
+ public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(), Optional.empty());
// This never changes and is only used to create a valid semantic version number, as required by application bundles
private static final String majorVersion = "1.0";
private final Optional<SourceRevision> source;
+ private final Optional<String> authorEmail;
private final OptionalLong buildNumber;
- private ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber) {
+ private ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail) {
Objects.requireNonNull(source, "source cannot be null");
Objects.requireNonNull(buildNumber, "buildNumber cannot be null");
+ Objects.requireNonNull(authorEmail, "author cannot be null");
if (source.isPresent() != buildNumber.isPresent()) {
throw new IllegalArgumentException("both buildNumber and source must be set together");
}
if (buildNumber.isPresent() && buildNumber.getAsLong() <= 0) {
throw new IllegalArgumentException("buildNumber must be > 0");
}
+ if (authorEmail.isPresent() && ! authorEmail.get().matches("[^@]+@[^@]+")) {
+ throw new IllegalArgumentException("Invalid author email '" + authorEmail.get() + "'.");
+ }
this.source = source;
this.buildNumber = buildNumber;
+ this.authorEmail = authorEmail;
}
- /** Create an application package version from a completed build */
+ /** Create an application package version from a completed build, without an author email */
public static ApplicationVersion from(SourceRevision source, long buildNumber) {
- return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber));
+ return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.empty());
+ }
+
+ /** Create an application package version from a completed build, with an author email */
+ public static ApplicationVersion from(SourceRevision source, long buildNumber, String authorEmail) {
+ return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail));
}
/** Returns an unique identifier for this version or "unknown" if version is not known */
@@ -60,6 +71,9 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
/** Returns the build number that built this version */
public OptionalLong buildNumber() { return buildNumber; }
+ /** Returns the email of the author of commit of this version, if known */
+ public Optional<String> authorEmail() { return authorEmail; }
+
/** Returns whether this is unknown */
public boolean isUnknown() {
return this.equals(unknown);
@@ -68,7 +82,7 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
@Override
public boolean equals(Object o) {
if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ if (!(o instanceof ApplicationVersion)) return false;
ApplicationVersion that = (ApplicationVersion) o;
return Objects.equals(source, that.source) &&
Objects.equals(buildNumber, that.buildNumber);
@@ -81,7 +95,9 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
@Override
public String toString() {
- return "Application package version: " + id() + source.map(s -> ", " + s.toString()).orElse("");
+ return "Application package version: " + id()
+ + source.map(s -> ", " + s.toString()).orElse("")
+ + authorEmail.map(e -> ", " + e).orElse("");
}
/** Abbreviate given commit hash to 9 characters */