aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
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
parentc6dd8b5a3c1c9aff65df402f0fd7c77bd3de74e9 (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.java20
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java28
-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);
+ }
+
}