diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2018-12-18 13:40:37 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2018-12-19 11:27:41 +0100 |
commit | f816fb18daad6ac5180d331c3fe041f0e33a253e (patch) | |
tree | 9c2cad4363824150d66fe8da329a1c4c168fd31f /controller-api | |
parent | c6dd8b5a3c1c9aff65df402f0fd7c77bd3de74e9 (diff) |
Add author email to ApplicationVersion, and store it with submissions
Diffstat (limited to 'controller-api')
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java | 20 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java | 28 | ||||
-rw-r--r-- | controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java (renamed from controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockMailer.java) | 10 |
3 files changed, 40 insertions, 18 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java index d0edbdcb8a6..600db544552 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/BuildService.java @@ -3,6 +3,8 @@ package com.yahoo.vespa.hosted.controller.api.integration; import com.yahoo.config.provision.ApplicationId; +import java.util.Objects; + /** * @author jonmv */ @@ -58,21 +60,17 @@ public interface BuildService { public String jobName() { return jobName; } @Override - public final boolean equals(Object o) { + public boolean equals(Object o) { if (this == o) return true; - if ( ! (o instanceof BuildJob)) return false; - - BuildJob buildJob = (BuildJob) o; - - if (projectId != buildJob.projectId) return false; - return jobName.equals(buildJob.jobName); + if (!(o instanceof BuildJob)) return false; + BuildJob job = (BuildJob) o; + return Objects.equals(applicationId, job.applicationId) && + Objects.equals(jobName, job.jobName); } @Override - public final int hashCode() { - int result = (int) (projectId ^ (projectId >>> 32)); - result = 31 * result + jobName.hashCode(); - return result; + public int hashCode() { + return Objects.hash(applicationId, jobName); } @Override 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 */ diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockMailer.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java index 9373d97a11c..9ef89d53068 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/organization/MockMailer.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMailer.java @@ -1,4 +1,7 @@ -package com.yahoo.vespa.hosted.controller.api.integration.organization; +package com.yahoo.vespa.hosted.controller.api.integration.stubs; + +import com.yahoo.vespa.hosted.controller.api.integration.organization.Mail; +import com.yahoo.vespa.hosted.controller.api.integration.organization.Mailer; import java.util.ArrayList; import java.util.HashMap; @@ -27,4 +30,9 @@ public class MockMailer implements Mailer { return "domain"; } + /** Returns the list of mails sent to the given recipient. Modifications affect the set of mails stored in this. */ + public List<Mail> inbox(String recipient) { + return mails.get(recipient); + } + } |