From 15935fb9bb3e557c048fe081cb7732e619e0a4c7 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 24 Nov 2016 15:28:53 +0100 Subject: [PATCH] #33 - Projects can now have an explicit full name. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project has a withFullName(…) to be able to define it manually. Projects makes use of that to explicitly define the name for Apache backed ones. Introduced a skipTests property to make explicit, which projects should not have their test run during a build. Introduced overloads to allow the optional lookup of a Project by name. --- .../data/release/cli/ReleaseCommands.java | 2 +- .../data/release/model/Project.java | 23 ++++++++++++++++--- .../data/release/model/Projects.java | 16 +++++++++---- .../data/release/model/ProjectUnitTests.java | 9 +++++++- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java b/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java index 38dd4cf..c1e06be 100644 --- a/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java +++ b/release-tools/src/main/java/org/springframework/data/release/cli/ReleaseCommands.java @@ -93,7 +93,7 @@ class ReleaseCommands extends TimedCommand { deployment.verifyAuthentication(); - Project project = Projects.byName(projectName); + Project project = Projects.requiredByName(projectName); ModuleIteration module = iteration.getModule(project); DeploymentInformation information = build.performRelease(module); diff --git a/release-tools/src/main/java/org/springframework/data/release/model/Project.java b/release-tools/src/main/java/org/springframework/data/release/model/Project.java index 2aa5fbb..e3880b3 100644 --- a/release-tools/src/main/java/org/springframework/data/release/model/Project.java +++ b/release-tools/src/main/java/org/springframework/data/release/model/Project.java @@ -15,9 +15,12 @@ */ package org.springframework.data.release.model; +import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.RequiredArgsConstructor; import lombok.ToString; +import lombok.experimental.Wither; import java.util.List; import java.util.function.Consumer; @@ -29,30 +32,40 @@ import org.springframework.util.Assert; */ @ToString @EqualsAndHashCode +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class Project implements Comparable { private final @Getter ProjectKey key; private final @Getter String name; + private final @Wither String fullName; private final @Getter List dependencies; private final @Getter Tracker tracker; private final @Getter ArtifactCoordinates additionalArtifacts; + private final @Wither boolean skipTests; Project(String key, String name, List dependencies) { - this(key, name, Tracker.JIRA, dependencies, ArtifactCoordinates.NONE); + this(key, name, null, Tracker.JIRA, dependencies, ArtifactCoordinates.NONE); } Project(String key, String name, List dependencies, ArtifactCoordinates additionalArtifacts) { - this(key, name, Tracker.JIRA, dependencies, additionalArtifacts); + this(key, name, null, Tracker.JIRA, dependencies, additionalArtifacts); } Project(String key, String name, Tracker tracker, List dependencies, ArtifactCoordinates additionalArtifacts) { + this(key, name, null, tracker, dependencies, additionalArtifacts); + } + + private Project(String key, String name, String fullName, Tracker tracker, List dependencies, + ArtifactCoordinates additionalArtifacts) { this.key = new ProjectKey(key); this.name = name; + this.fullName = fullName; this.dependencies = dependencies; this.tracker = tracker; this.additionalArtifacts = additionalArtifacts; + this.skipTests = false; } public boolean uses(Tracker tracker) { @@ -60,7 +73,7 @@ public class Project implements Comparable { } public String getFullName() { - return "Spring Data ".concat(name); + return fullName != null ? fullName : "Spring Data ".concat(name); } public String getFolderName() { @@ -88,6 +101,10 @@ public class Project implements Comparable { return dependencies.stream().anyMatch(dependency -> dependency.equals(project) || dependency.dependsOn(project)); } + public boolean skipTests() { + return this.skipTests; + } + /* * (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) diff --git a/release-tools/src/main/java/org/springframework/data/release/model/Projects.java b/release-tools/src/main/java/org/springframework/data/release/model/Projects.java index be0a3c3..fd6886e 100644 --- a/release-tools/src/main/java/org/springframework/data/release/model/Projects.java +++ b/release-tools/src/main/java/org/springframework/data/release/model/Projects.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Optional; import org.jgrapht.graph.DefaultDirectedGraph; import org.jgrapht.graph.DefaultEdge; @@ -45,10 +46,10 @@ public class Projects { MONGO_DB = new Project("DATAMONGO", "MongoDB", Arrays.asList(COMMONS), ArtifactCoordinates.NONE.artifacts("spring-data-mongodb-cross-store", "spring-data-mongodb-log4j")); NEO4J = new Project("DATAGRAPH", "Neo4j", Arrays.asList(COMMONS)); - SOLR = new Project("DATASOLR", "Solr", Arrays.asList(COMMONS)); + SOLR = new Project("DATASOLR", "Solr", Arrays.asList(COMMONS)).withFullName("Spring Data for Apache Solr"); COUCHBASE = new Project("DATACOUCH", "Couchbase", Arrays.asList(COMMONS)); CASSANDRA = new Project("DATACASS", "Cassandra", Arrays.asList(COMMONS), - ArtifactCoordinates.NONE.artifacts("spring-cql")); + ArtifactCoordinates.NONE.artifacts("spring-cql")).withFullName("Spring Data for Apache Cassandra"); ELASTICSEARCH = new Project("DATAES", "Elasticsearch", Arrays.asList(COMMONS)); KEY_VALUE = new Project("DATAKV", "KeyValue", Arrays.asList(COMMONS)); REDIS = new Project("DATAREDIS", "Redis", Arrays.asList(COMMONS, KEY_VALUE)); @@ -87,11 +88,16 @@ public class Projects { PROJECTS = Collections.unmodifiableList(intermediate); } - public static Project byName(String name) { + public static Optional byName(String name) { return PROJECTS.stream().// filter(project -> project.getName().equalsIgnoreCase(name) || project.getKey().toString().equals(name)).// - findFirst() - .orElseThrow(() -> new IllegalArgumentException(String.format("No project named %s available!", name))); + findFirst(); + } + + public static Project requiredByName(String name) { + + return byName(name).// + orElseThrow(() -> new IllegalArgumentException(String.format("No project named %s available!", name))); } } diff --git a/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java b/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java index 08addb2..1ede0d1 100644 --- a/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java +++ b/release-tools/src/test/java/org/springframework/data/release/model/ProjectUnitTests.java @@ -48,6 +48,13 @@ public class ProjectUnitTests { */ @Test public void findsProjectByKey() { - assertThat(Projects.byName("DATACMNS"), is(Projects.COMMONS)); + assertThat(Projects.requiredByName("DATACMNS"), is(Projects.COMMONS)); + } + + @Test + public void returnsCustomFullNameIfSet() { + + assertThat(Projects.BUILD.getFullName(), is("Spring Data Build")); + assertThat(Projects.CASSANDRA.getFullName(), is("Spring Data for Apache Cassandra")); } }