Updated code to use Maven Version Plugin
This commit is contained in:
@@ -4,7 +4,6 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>releaser-core</artifactId>
|
||||
<version>0.0.1.BUILD-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
@@ -35,7 +34,14 @@
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-model</artifactId>
|
||||
<version>3.3.9</version>
|
||||
<!--<version>3.3.9</version>-->
|
||||
<!-- Versions plugin uses this version -->
|
||||
<version>2.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>versions-maven-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
||||
@@ -15,16 +15,25 @@
|
||||
*/
|
||||
package org.springframework.cloud.release.internal;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
|
||||
import org.apache.maven.plugin.logging.Log;
|
||||
import org.codehaus.mojo.versions.api.PomHelper;
|
||||
import org.codehaus.mojo.versions.change.AbstractVersionChanger;
|
||||
import org.codehaus.mojo.versions.change.VersionChange;
|
||||
import org.codehaus.mojo.versions.change.VersionChanger;
|
||||
import org.codehaus.mojo.versions.change.VersionChangerFactory;
|
||||
import org.codehaus.mojo.versions.rewriting.ModifiedPomXMLEventReader;
|
||||
import org.codehaus.stax2.XMLInputFactory2;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -53,33 +62,29 @@ class PomUpdater {
|
||||
if (!versions.shouldBeUpdated(model.getArtifactId())) {
|
||||
log.info("Skipping project [{}] since it's not on the list of projects to update", model.getArtifactId());
|
||||
return false;
|
||||
} else if (versions.versionAlreadySet(model.getArtifactId(), model.getVersion())) {
|
||||
log.info("Version has already been set. The project shouldn't be updated.");
|
||||
return false;
|
||||
}
|
||||
log.info("Project [{}] will have its dependencies updated", model.getArtifactId());
|
||||
return true;
|
||||
}
|
||||
|
||||
ModelWrapper readModel(File pom) {
|
||||
return new ModelWrapper(this.pomReader.readPom(pom), false);
|
||||
return new ModelWrapper(this.pomReader.readPom(pom));
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the root / child module model
|
||||
*
|
||||
* @param rootProjectName - name of the artifactId of the root project
|
||||
* @param rootProject - root project model
|
||||
* @param pom - file with the pom
|
||||
* @param versions - versions to update
|
||||
* @return updated model
|
||||
*/
|
||||
ModelWrapper updateModel(String rootProjectName, File pom, Versions versions) {
|
||||
ModelWrapper updateModel(ModelWrapper rootProject, File pom, Versions versions) {
|
||||
Model model = this.pomReader.readPom(pom);
|
||||
boolean dirty = false;
|
||||
dirty = updateParentIfPossible(rootProjectName, versions, model) || dirty ;
|
||||
dirty = updateVersionIfPossible(rootProjectName, versions, model) || dirty ;
|
||||
dirty = updateProperties(versions, model) || dirty;
|
||||
return new ModelWrapper(model, dirty);
|
||||
List<VersionChange> sourceChanges = new ArrayList<>();
|
||||
sourceChanges = updateParentIfPossible(rootProject, versions, model, sourceChanges);
|
||||
sourceChanges = updateVersionIfPossible(rootProject, versions, model, sourceChanges);
|
||||
return new ModelWrapper(model, sourceChanges, versions);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -88,85 +93,256 @@ class PomUpdater {
|
||||
*
|
||||
* @return - the pom file
|
||||
*/
|
||||
File overwritePomIfDirty(ModelWrapper wrapper, File pom) {
|
||||
if (wrapper.dirty) {
|
||||
File overwritePomIfDirty(ModelWrapper wrapper, Versions versions, File pom) {
|
||||
if (wrapper.isDirty()) {
|
||||
log.debug("There were changes in the pom so file will be overridden");
|
||||
this.pomWriter.write(wrapper.model, pom);
|
||||
this.pomWriter.write(wrapper, versions, pom);
|
||||
log.info("Successfully stored [{}]", pom);
|
||||
}
|
||||
return pom;
|
||||
}
|
||||
|
||||
|
||||
private boolean updateProperties(Versions versions, Model model) {
|
||||
final AtomicBoolean atomicBoolean = new AtomicBoolean();
|
||||
versions.projects
|
||||
.forEach(project -> {
|
||||
Properties properties = model.getProperties();
|
||||
String projectVersionKey = project.name + ".version";
|
||||
if (properties.containsKey(projectVersionKey)) {
|
||||
Object previous = properties.setProperty(projectVersionKey, project.version);
|
||||
log.info("Updated property [{}] => [{}]. Previous version [{}]",
|
||||
projectVersionKey, project.version, previous);
|
||||
atomicBoolean.set(true);
|
||||
}
|
||||
});
|
||||
return atomicBoolean.get();
|
||||
}
|
||||
|
||||
private boolean updateParentIfPossible(String rootProjectName, Versions versions, Model model) {
|
||||
private List<VersionChange> updateParentIfPossible(ModelWrapper wrapper, Versions versions,
|
||||
Model model, List<VersionChange> sourceChanges) {
|
||||
String rootProjectName = wrapper.projectName();
|
||||
List<VersionChange> changes = new ArrayList<>(sourceChanges);
|
||||
if (model.getParent() == null || StringUtils.isEmpty(model.getParent().getVersion())) {
|
||||
return false;
|
||||
return changes;
|
||||
}
|
||||
String parentGroupId = model.getParent().getGroupId();
|
||||
String parentArtifactId = model.getParent().getArtifactId();
|
||||
String oldVersion = model.getParent().getVersion();
|
||||
String version = versions.versionForProject(parentArtifactId);
|
||||
if (StringUtils.isEmpty(version)) {
|
||||
if (StringUtils.hasText(model.getParent().getRelativePath())) {
|
||||
version = versions.versionForProject(rootProjectName);
|
||||
} else {
|
||||
log.warn("There is no info on the [{}] version", model.getArtifactId());
|
||||
return false;
|
||||
return changes;
|
||||
}
|
||||
}
|
||||
log.info("Setting version of parent [{}] to [{}] for module [{}]", parentArtifactId, version, model.getArtifactId());
|
||||
model.getParent().setVersion(version);
|
||||
return true;
|
||||
log.info("Setting version of parent [{}] to [{}] for module [{}]", parentArtifactId,
|
||||
version, model.getArtifactId());
|
||||
changes.add(new VersionChange(parentGroupId, parentArtifactId, oldVersion, version));
|
||||
return changes;
|
||||
}
|
||||
|
||||
private boolean updateVersionIfPossible(String rootProjectName, Versions versions, Model model) {
|
||||
private List<VersionChange> updateVersionIfPossible(ModelWrapper wrapper, Versions versions,
|
||||
Model model, List<VersionChange> sourceChanges) {
|
||||
String rootProjectName = wrapper.projectName();
|
||||
List<VersionChange> changes = new ArrayList<>(sourceChanges);
|
||||
String parentGroupId = groupId(model);
|
||||
String parentArtifactId = model.getArtifactId();
|
||||
String oldVersion = model.getVersion();
|
||||
String version = versions.versionForProject(rootProjectName);
|
||||
if (StringUtils.isEmpty(version) || StringUtils.isEmpty(model.getVersion())) {
|
||||
log.warn("There was no version set for project [{}], skipping version setting for module [{}]", rootProjectName, model.getArtifactId());
|
||||
return false;
|
||||
return changes;
|
||||
}
|
||||
log.info("Setting [{}] version to [{}]", model.getArtifactId(), version);
|
||||
model.setVersion(version);
|
||||
return true;
|
||||
changes.add(new VersionChange(parentGroupId, parentArtifactId, oldVersion, version));
|
||||
return changes;
|
||||
}
|
||||
|
||||
private String groupId(Model model) {
|
||||
if (StringUtils.hasText(model.getGroupId())) {
|
||||
return model.getGroupId();
|
||||
}
|
||||
if (model.getParent() != null) {
|
||||
return model.getParent().getGroupId();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
class ModelWrapper {
|
||||
final Model model;
|
||||
final boolean dirty;
|
||||
final Versions versions;
|
||||
final List<VersionChange> sourceChanges = new ArrayList<>();
|
||||
|
||||
ModelWrapper(Model model, boolean dirty) {
|
||||
ModelWrapper(Model model, List<VersionChange> sourceChanges, Versions versions) {
|
||||
this.model = model;
|
||||
this.dirty = dirty;
|
||||
this.versions = versions;
|
||||
this.sourceChanges.addAll(sourceChanges);
|
||||
}
|
||||
|
||||
ModelWrapper(Model model) {
|
||||
this.model = model;
|
||||
this.versions = Versions.EMPTY_VERSION;
|
||||
}
|
||||
|
||||
String projectName() {
|
||||
return this.model.getArtifactId();
|
||||
}
|
||||
|
||||
boolean isDirty() {
|
||||
return !this.sourceChanges.isEmpty() || this.versions.shouldSetProperty(this.model.getProperties());
|
||||
}
|
||||
}
|
||||
|
||||
class PomWriter {
|
||||
void write(Model model, File pom) {
|
||||
try(Writer writer = new FileWriter(pom)) {
|
||||
MavenXpp3Writer pomWriter = new MavenXpp3Writer();
|
||||
pomWriter.write(writer, model);
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new IllegalStateException("Failed to write file", e);
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
|
||||
void write(ModelWrapper wrapper, Versions versions, File pom) {
|
||||
try {
|
||||
VersionChangerFactory versionChangerFactory = new VersionChangerFactory();
|
||||
StringBuilder input = PomHelper.readXmlFile(pom);
|
||||
ModifiedPomXMLEventReader parsedPom = newModifiedPomXER(input);
|
||||
versionChangerFactory.setPom(parsedPom);
|
||||
LoggerToMavenLog loggerToMavenLog = new LoggerToMavenLog(PomWriter.log);
|
||||
versionChangerFactory.setLog(loggerToMavenLog);
|
||||
versionChangerFactory.setModel(wrapper.model);
|
||||
log.info("Applying version / parent / plugin / project changes to the pom [{}]", pom);
|
||||
VersionChanger changer = versionChangerFactory.newVersionChanger( true,
|
||||
true, true, true);
|
||||
for (VersionChange versionChange : wrapper.sourceChanges) {
|
||||
changer.apply(versionChange);
|
||||
}
|
||||
log.info("Applying properties changes to the pom [{}]", pom);
|
||||
new PropertyVersionChanger(wrapper, versions, parsedPom, loggerToMavenLog)
|
||||
.apply(null);
|
||||
try (BufferedWriter bw = new BufferedWriter(new FileWriter(pom))) {
|
||||
bw.write(input.toString());
|
||||
}
|
||||
log.info("Flushed changes to the pom file [{}]", pom);
|
||||
} catch (Exception e) {
|
||||
log.error("Exception occurred while trying to apply changes to the POM", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link org.codehaus.mojo.versions.rewriting.ModifiedPomXMLEventReader} from a StringBuilder.
|
||||
*
|
||||
* @param input The XML to read and modify.
|
||||
* @return The {@link org.codehaus.mojo.versions.rewriting.ModifiedPomXMLEventReader}.
|
||||
*/
|
||||
private ModifiedPomXMLEventReader newModifiedPomXER(StringBuilder input) {
|
||||
ModifiedPomXMLEventReader newPom = null;
|
||||
try {
|
||||
XMLInputFactory inputFactory = XMLInputFactory2.newInstance();
|
||||
inputFactory.setProperty(XMLInputFactory2.P_PRESERVE_LOCATION, Boolean.TRUE);
|
||||
newPom = new ModifiedPomXMLEventReader(input, inputFactory);
|
||||
}
|
||||
catch (XMLStreamException e) {
|
||||
log.error("Exception occurred while trying to parse pom", e);
|
||||
}
|
||||
return newPom;
|
||||
}
|
||||
}
|
||||
|
||||
class PropertyVersionChanger extends AbstractVersionChanger {
|
||||
|
||||
private final Versions versions;
|
||||
private final Log log;
|
||||
|
||||
public PropertyVersionChanger(ModelWrapper wrapper, Versions versions, ModifiedPomXMLEventReader pom, Log log) {
|
||||
super(wrapper.model, pom, log);
|
||||
this.versions = versions;
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
@Override public void apply(final VersionChange versionChange) throws XMLStreamException {
|
||||
this.versions.projects
|
||||
.stream()
|
||||
.filter(project -> {
|
||||
Properties properties = getModel().getProperties();
|
||||
String projectVersionKey = propertyName(project);
|
||||
return properties.containsKey(projectVersionKey);
|
||||
})
|
||||
.forEach(project -> {
|
||||
String propertyName = propertyName(project);
|
||||
if (setPropertyVersion(propertyName, project.version)) {
|
||||
info(" Updating property " + propertyName);
|
||||
info(" to version " + project.version);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String propertyName(Project project) {
|
||||
return project.name + ".version";
|
||||
}
|
||||
|
||||
private boolean setPropertyVersion(String propertyName, String version) {
|
||||
try {
|
||||
return PomHelper.setPropertyVersion(getPom(), null, propertyName, version);
|
||||
}
|
||||
catch (XMLStreamException e) {
|
||||
this.log.error("Exception occurred while trying to set property version", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LoggerToMavenLog implements Log {
|
||||
|
||||
private final Logger logger;
|
||||
|
||||
LoggerToMavenLog(Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
@Override public boolean isDebugEnabled() {
|
||||
return this.logger.isDebugEnabled();
|
||||
}
|
||||
|
||||
@Override public void debug(CharSequence content) {
|
||||
this.logger.debug(content.toString());
|
||||
}
|
||||
|
||||
@Override public void debug(CharSequence content, Throwable error) {
|
||||
this.logger.debug(content.toString(), error);
|
||||
}
|
||||
|
||||
@Override public void debug(Throwable error) {
|
||||
this.debug("Exception occurred", error);
|
||||
}
|
||||
|
||||
@Override public boolean isInfoEnabled() {
|
||||
return this.logger.isInfoEnabled();
|
||||
}
|
||||
|
||||
@Override public void info(CharSequence content) {
|
||||
this.logger.info(content.toString());
|
||||
}
|
||||
|
||||
@Override public void info(CharSequence content, Throwable error) {
|
||||
this.logger.info(content.toString(), error);
|
||||
}
|
||||
|
||||
@Override public void info(Throwable error) {
|
||||
this.info("Exception occurred", error);
|
||||
}
|
||||
|
||||
@Override public boolean isWarnEnabled() {
|
||||
return this.logger.isWarnEnabled();
|
||||
}
|
||||
|
||||
@Override public void warn(CharSequence content) {
|
||||
this.logger.warn(content.toString());
|
||||
}
|
||||
|
||||
@Override public void warn(CharSequence content, Throwable error) {
|
||||
this.logger.warn(content.toString(), error);
|
||||
}
|
||||
|
||||
@Override public void warn(Throwable error) {
|
||||
this.warn("Exception occurred", error);
|
||||
}
|
||||
|
||||
@Override public boolean isErrorEnabled() {
|
||||
return this.logger.isErrorEnabled();
|
||||
}
|
||||
|
||||
@Override public void error(CharSequence content) {
|
||||
this.logger.error(content.toString());
|
||||
}
|
||||
|
||||
@Override public void error(CharSequence content, Throwable error) {
|
||||
this.logger.error(content.toString(), error);
|
||||
}
|
||||
|
||||
@Override public void error(Throwable error) {
|
||||
this.error("Exception occurred", error);
|
||||
}
|
||||
}
|
||||
@@ -42,8 +42,8 @@ public class ProjectUpdater {
|
||||
File clonedScRelease = this.gitProjectRepo.cloneProject(
|
||||
URI.create(this.properties.getSpringCloudReleaseGitUrl()));
|
||||
this.gitProjectRepo.checkout(clonedScRelease, this.properties.getBranch());
|
||||
SCReleasePomParser SCReleasePomParser = new SCReleasePomParser(clonedScRelease);
|
||||
Versions versions = SCReleasePomParser.allVersions();
|
||||
SCReleasePomParser sCReleasePomParser = new SCReleasePomParser(clonedScRelease);
|
||||
Versions versions = sCReleasePomParser.allVersions();
|
||||
if (!this.pomUpdater.shouldProjectBeUpdated(projectRoot, versions)) {
|
||||
log.info("Skipping project updating");
|
||||
return;
|
||||
@@ -80,8 +80,8 @@ public class ProjectUpdater {
|
||||
public FileVisitResult visitFile(Path path, BasicFileAttributes attr) {
|
||||
File file = path.toFile();
|
||||
if (POM_XML.equals(file.getName())) {
|
||||
ModelWrapper model = this.pomUpdater.updateModel(this.rootPom.projectName(), file, this.versions);
|
||||
this.pomUpdater.overwritePomIfDirty(model, file);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(this.rootPom, file, this.versions);
|
||||
this.pomUpdater.overwritePomIfDirty(model, this.versions, file);
|
||||
}
|
||||
return FileVisitResult.CONTINUE;
|
||||
}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package org.springframework.cloud.release.internal;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.springframework.cloud.release.internal.SpringCloudConstants.BUILD_ARTIFACT_ID;
|
||||
import static org.springframework.cloud.release.internal.SpringCloudConstants.CLOUD_DEPENDENCIES_ARTIFACT_ID;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Represents versions taken out from Spring Cloud Release pom
|
||||
*
|
||||
@@ -14,6 +15,7 @@ import java.util.Set;
|
||||
class Versions {
|
||||
|
||||
private static final String SPRING_BOOT_PROJECT_NAME = "spring-boot";
|
||||
static final Versions EMPTY_VERSION = new Versions("");
|
||||
|
||||
String bootVersion;
|
||||
String scBuildVersion;
|
||||
@@ -52,9 +54,9 @@ class Versions {
|
||||
.anyMatch(project -> project.name.equals(projectName));
|
||||
}
|
||||
|
||||
boolean versionAlreadySet(String projectName, String version) {
|
||||
String versionForProject = versionForProject(projectName);
|
||||
return version.equals(versionForProject);
|
||||
boolean shouldSetProperty(Properties properties) {
|
||||
return this.projects.stream()
|
||||
.anyMatch(project -> properties.containsKey(project.name + ".version"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.springframework.cloud.release.internal;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
@@ -25,12 +23,15 @@ import java.nio.file.Files;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
|
||||
import static org.springframework.cloud.release.internal.VersionChangeAssertions.then;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
@@ -64,68 +65,44 @@ public class PomUpdaterTests {
|
||||
public void should_not_update_the_model_if_no_changes_were_made() throws Exception {
|
||||
File nonMatchingPom = pom("/projects/project");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("foo", nonMatchingPom, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("foo"), nonMatchingPom, this.versions);
|
||||
|
||||
then(model.dirty).isFalse();
|
||||
then(model.isDirty()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_update_the_model_if_only_artifact_id_is_matched_in_the_root_pom() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project", "pom_matching_artifact.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
// the rest is the same
|
||||
then(model.model.getParent().getVersion()).isEqualTo("1.3.1.BUILD-SNAPSHOT");
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-foo.version", "1.3.1.BUILD-SNAPSHOT")
|
||||
.containsEntry("foo.version", "1.2.0.BUILD-SNAPSHOT");
|
||||
then(model.isDirty()).isTrue();
|
||||
then(new ListOfChanges(model))
|
||||
.newParentVersionIsEqualTo("parentGroup", "spring-cloud-sleuth", "0.0.3.BUILD-SNAPSHOT");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_update_the_model_if_parent_is_matched_via_sc_build() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project", "pom_matching_parent_v2.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
then(model.model.getParent().getVersion()).isEqualTo("0.0.2");
|
||||
// the rest is the same
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-foo.version", "1.3.1.BUILD-SNAPSHOT")
|
||||
.containsEntry("foo.version", "1.2.0.BUILD-SNAPSHOT");
|
||||
then(model.isDirty()).isTrue();
|
||||
then(new ListOfChanges(model))
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-sleuth", "0.0.3.BUILD-SNAPSHOT")
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-build", "0.0.2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_update_the_model_if_parent_is_matched_via_sc_dependencies_parent() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project", "pom_matching_parent.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
then(model.model.getParent().getVersion()).isEqualTo("0.0.2");
|
||||
// the rest is the same
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-foo.version", "1.3.1.BUILD-SNAPSHOT")
|
||||
.containsEntry("foo.version", "1.2.0.BUILD-SNAPSHOT");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_update_the_model_if_properties_are_matched() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project", "pom_matching_properties.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
then(model.model.getParent().getVersion()).isEqualTo("0.0.2");
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT")
|
||||
.containsEntry("spring-cloud-vault.version", "0.0.4.BUILD-SNAPSHOT");
|
||||
then(model.isDirty()).isTrue();
|
||||
then(new ListOfChanges(model))
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-sleuth", "0.0.3.BUILD-SNAPSHOT")
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-build", "0.0.2");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -146,10 +123,11 @@ public class PomUpdaterTests {
|
||||
public void should_update_the_child_model_if_parent_is_matched_via_sc_build() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project/children", "pom_matching_parent_v2.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getParent().getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
then(model.isDirty()).isTrue();
|
||||
then(new ListOfChanges(model))
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-sleuth", "0.0.3.BUILD-SNAPSHOT");
|
||||
// the rest is the same
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-foo.version", "1.3.1.BUILD-SNAPSHOT")
|
||||
@@ -160,10 +138,11 @@ public class PomUpdaterTests {
|
||||
public void should_update_the_child_model_if_parent_is_matched_via_sc_dependencies_parent() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project/children", "pom_matching_parent.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getParent().getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
then(model.isDirty()).isTrue();
|
||||
then(new ListOfChanges(model))
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-sleuth", "0.0.3.BUILD-SNAPSHOT");
|
||||
// the rest is the same
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-foo.version", "1.3.1.BUILD-SNAPSHOT")
|
||||
@@ -174,13 +153,11 @@ public class PomUpdaterTests {
|
||||
public void should_update_the_child_model_if_properties_are_matched() throws Exception {
|
||||
File matchingArtifactId = pom("/projects/project/children", "pom_matching_properties.xml");
|
||||
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", matchingArtifactId, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), matchingArtifactId, this.versions);
|
||||
|
||||
then(model.dirty).isTrue();
|
||||
then(model.model.getParent().getVersion()).isEqualTo("0.0.3.BUILD-SNAPSHOT");
|
||||
then(model.model.getProperties())
|
||||
.containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT")
|
||||
.containsEntry("spring-cloud-vault.version", "0.0.4.BUILD-SNAPSHOT");
|
||||
then(model.isDirty()).isTrue();
|
||||
then(new ListOfChanges(model))
|
||||
.newParentVersionIsEqualTo("org.springframework.cloud", "spring-cloud-sleuth", "0.0.3.BUILD-SNAPSHOT");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -188,9 +165,9 @@ public class PomUpdaterTests {
|
||||
FileSystemUtils.copyRecursively(file("/projects/project"), this.temporaryFolder);
|
||||
File beforeProcessing = pom("/projects/project/children", "pom_matching_properties.xml");
|
||||
File afterProcessing = new File(this.temporaryFolder, "/children/pom_matching_properties.xml");
|
||||
ModelWrapper model = this.pomUpdater.updateModel("spring-cloud-sleuth", afterProcessing, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("spring-cloud-sleuth"), afterProcessing, this.versions);
|
||||
|
||||
File processedPom = this.pomUpdater.overwritePomIfDirty(model, afterProcessing);
|
||||
File processedPom = this.pomUpdater.overwritePomIfDirty(model, Versions.EMPTY_VERSION, afterProcessing);
|
||||
|
||||
then(processedPom).isSameAs(afterProcessing);
|
||||
String processedPomText = asString(processedPom);
|
||||
@@ -203,9 +180,9 @@ public class PomUpdaterTests {
|
||||
FileSystemUtils.copyRecursively(file("/projects/project"), this.temporaryFolder);
|
||||
File beforeProcessing = pom("/projects/project/");
|
||||
File afterProcessing = new File(this.temporaryFolder, "/pom.xml");
|
||||
ModelWrapper model = this.pomUpdater.updateModel("foo", afterProcessing, this.versions);
|
||||
ModelWrapper model = this.pomUpdater.updateModel(model("foo"), afterProcessing, this.versions);
|
||||
|
||||
File processedPom = this.pomUpdater.overwritePomIfDirty(model, afterProcessing);
|
||||
File processedPom = this.pomUpdater.overwritePomIfDirty(model, Versions.EMPTY_VERSION, afterProcessing);
|
||||
|
||||
then(processedPom).isSameAs(afterProcessing);
|
||||
then(asString(processedPom)).isEqualTo(asString(beforeProcessing));
|
||||
@@ -218,6 +195,12 @@ public class PomUpdaterTests {
|
||||
return projects;
|
||||
}
|
||||
|
||||
private ModelWrapper model(String projectName) {
|
||||
Model parent = new Model();
|
||||
parent.setArtifactId(projectName);
|
||||
return new ModelWrapper(parent);
|
||||
}
|
||||
|
||||
private File file(String relativePath) throws URISyntaxException {
|
||||
return new File(GitProjectRepoTests.class.getResource(relativePath).toURI());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
package org.springframework.cloud.release.internal;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.assertj.core.api.AbstractAssert;
|
||||
import org.assertj.core.api.BDDAssertions;
|
||||
import org.codehaus.mojo.versions.change.VersionChange;
|
||||
|
||||
/**
|
||||
* @author Marcin Grzejszczak
|
||||
*/
|
||||
class VersionChangeAssertions extends BDDAssertions {
|
||||
|
||||
public static VersionChangeAssert then(ListOfChanges actual) {
|
||||
return assertThat(actual);
|
||||
}
|
||||
|
||||
public static VersionChangeAssert assertThat(ListOfChanges actual) {
|
||||
return new VersionChangeAssert(actual);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ListOfChanges {
|
||||
|
||||
final List<VersionChange> changes;
|
||||
|
||||
ListOfChanges(ModelWrapper model) {
|
||||
this.changes = new ArrayList<>(model.sourceChanges);
|
||||
}
|
||||
}
|
||||
|
||||
class VersionChangeAssert extends
|
||||
AbstractAssert<VersionChangeAssert, ListOfChanges> {
|
||||
|
||||
public VersionChangeAssert(ListOfChanges actual) {
|
||||
super(actual, VersionChangeAssert.class);
|
||||
}
|
||||
|
||||
VersionChangeAssert newParentVersionIsEqualTo(String groupId, String artifactId, String newVersion) {
|
||||
boolean matches = false;
|
||||
for (VersionChange change : actual.changes) {
|
||||
if (newVersion.equals(change.getNewVersion())
|
||||
&& groupId.equals(change.getGroupId())
|
||||
&& artifactId.equals(change.getArtifactId())) {
|
||||
matches = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (matches) {
|
||||
return this;
|
||||
}
|
||||
failWithMessage("There is no change with that parent coordinates");
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,10 @@
|
||||
package org.springframework.cloud.release.internal;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.cloud.release.internal.Project;
|
||||
import org.springframework.cloud.release.internal.Versions;
|
||||
|
||||
import static org.assertj.core.api.BDDAssertions.then;
|
||||
|
||||
@@ -58,9 +57,31 @@ public class VersionsTests {
|
||||
then(this.versions.versionForProject("missing")).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_true_if_properties_contains_project_key() {
|
||||
then(this.versions.shouldSetProperty(validProps())).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_return_False_if_properties_does_not_contain_project_key() {
|
||||
then(this.versions.shouldSetProperty(missingProps())).isFalse();
|
||||
}
|
||||
|
||||
Set<Project> projects() {
|
||||
Set<Project> projects = new HashSet<>();
|
||||
projects.add(new Project("foo", "bar"));
|
||||
return projects;
|
||||
}
|
||||
|
||||
Properties validProps() {
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty("foo.version", "1.0.0");
|
||||
return properties;
|
||||
}
|
||||
|
||||
Properties missingProps() {
|
||||
Properties properties = new Properties();
|
||||
properties.setProperty("missing.version", "1.0.0");
|
||||
return properties;
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-dependencies-parent</artifactId>
|
||||
<artifactId>spring-cloud-build</artifactId>
|
||||
<version>1.3.1.BUILD-SNAPSHOT</version>
|
||||
<relativePath/>
|
||||
<!-- lookup parent from repository -->
|
||||
|
||||
Reference in New Issue
Block a user