From 96f4aed8962d812746d08cb62594ff61d1c8a9dd Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 24 Nov 2017 12:53:55 +0100 Subject: [PATCH] Hopefully fixed wrong version bumping; fixes #62 --- .../release/internal/ReleaserProperties.java | 2 + .../release/internal/pom/PomUpdater.java | 19 +++ .../release/internal/pom/PomUpdaterTests.java | 37 +++++ .../children/pom_case_from_contract.xml | 129 ++++++++++++++++++ .../project/children/pom_different_group.xml | 40 ++++++ 5 files changed, 227 insertions(+) create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_case_from_contract.xml create mode 100644 spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group.xml diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java index 36aafa93..b6edb981 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java @@ -128,6 +128,7 @@ public class ReleaserProperties { this.numberOfCheckedMilestones = numberOfCheckedMilestones; } } + public static class Pom { /** @@ -163,6 +164,7 @@ public class ReleaserProperties { } } + public static class Maven { /** diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java index f368be4e..a76f7dd7 100644 --- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java +++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/PomUpdater.java @@ -124,11 +124,17 @@ class PomUpdater { private List updateParentIfPossible(ModelWrapper wrapper, Versions versions, Model model, List sourceChanges) { String rootProjectName = wrapper.projectName(); + String rootProjectGroupId = wrapper.groupId(); List changes = new ArrayList<>(sourceChanges); if (model.getParent() == null || isEmpty(model.getParent().getVersion())) { log.debug("Can't set the value for parent... Will return {}", sourceChanges); return changes; } + if (model.getGroupId() != null && !model.getGroupId().equals(rootProjectGroupId)) { + log.info("Will not update the project's [{}] parent [{}] since its group id [{}] is not equal the parent group id [{}]", + model.getArtifactId(), model.getParent().getArtifactId(), model.getGroupId(), rootProjectGroupId); + return changes; + } String parentGroupId = model.getParent().getGroupId(); String parentArtifactId = model.getParent().getArtifactId(); log.debug("Searching for a version of parent [{}:{}]", parentGroupId, parentArtifactId); @@ -158,9 +164,14 @@ class PomUpdater { private List updateVersionIfPossible(ModelWrapper wrapper, Versions versions, Model model, List sourceChanges) { String rootProjectName = wrapper.projectName(); + String rootProjectGroupId = wrapper.groupId(); List changes = new ArrayList<>(sourceChanges); String groupId = groupId(model); String artifactId = model.getArtifactId(); + if (model.getGroupId() != null && !model.getGroupId().equals(rootProjectGroupId)) { + log.info("Will not update project [{}] since its group id [{}] is not equal the parent group id [{}]", model.getArtifactId(), model.getGroupId(), rootProjectGroupId); + return changes; + } log.debug("Searching for a version [{}:{}]", groupId, artifactId); String oldVersion = model.getVersion(); String version = versions.versionForProject(rootProjectName); @@ -209,6 +220,14 @@ class ModelWrapper { return this.model.getArtifactId(); } + String groupId() { + if (this.model.getGroupId() != null) { + return this.model.getGroupId(); + } + return this.model.getParent() != null ? + this.model.getParent().getGroupId() : ""; + } + boolean isDirty() { return !this.sourceChanges.isEmpty() || this.versions.shouldSetProperty(this.model.getProperties()); } diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java index 61e8d06d..875717c3 100644 --- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java +++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/pom/PomUpdaterTests.java @@ -172,6 +172,36 @@ public class PomUpdaterTests { .containsEntry("foo.version", "1.2.0.BUILD-SNAPSHOT"); } + @Test + public void should_only_update_the_props_when_group_ids_dont_match() throws Exception { + File originalPom = pom("/projects/project/children", "pom_different_group.xml"); + File pomInTemp = tmpFile("/project/children/pom_different_group.xml"); + ModelWrapper rootPom = model("spring-cloud-sleuth", "org.springframework.cloud"); + ModelWrapper model = this.pomUpdater.updateModel(rootPom, pomInTemp, this.versions); + + File storedPom = this.pomUpdater.overwritePomIfDirty(model, this.versions, pomInTemp); + + BDDAssertions.then(asString(storedPom)).isNotEqualTo(asString(originalPom)); + Model overriddenPomModel = this.pomReader.readPom(storedPom); + BDDAssertions.then(overriddenPomModel.getVersion()).isEqualTo("1.2.2.BUILD-SNAPSHOT"); + BDDAssertions.then(overriddenPomModel.getParent().getVersion()).isEqualTo("1.5.8.RELEASE"); + // the rest is the same + BDDAssertions.then(overriddenPomModel.getProperties()) + .containsEntry("spring-cloud-sleuth.version", "0.0.3.BUILD-SNAPSHOT"); + } + + @Test + public void should_not_update_the_project_if_group_doesnt_match() throws Exception { + File originalPom = pom("/projects/project/children", "pom_case_from_contract.xml"); + File pomInTemp = tmpFile("/project/children/pom_case_from_contract.xml"); + ModelWrapper rootPom = model("spring-cloud-contract", "org.springframework.cloud"); + ModelWrapper model = this.pomUpdater.updateModel(rootPom, pomInTemp, this.versions); + + File storedPom = this.pomUpdater.overwritePomIfDirty(model, this.versions, pomInTemp); + + BDDAssertions.then(asString(storedPom)).isEqualTo(asString(originalPom)); + } + @Test public void should_update_the_child_pom_if_parent_is_matched_via_sc_dependencies_parent() throws Exception { File originalPom = pom("/projects/project/children", "pom_matching_parent.xml"); @@ -274,6 +304,13 @@ public class PomUpdaterTests { return new ModelWrapper(parent); } + private ModelWrapper model(String projectName, String groupId) { + Model parent = new Model(); + parent.setArtifactId(projectName); + parent.setGroupId(groupId); + return new ModelWrapper(parent); + } + private File tmpFile(String relativePath) { return new File(this.temporaryFolder, relativePath); } diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_case_from_contract.xml b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_case_from_contract.xml new file mode 100644 index 00000000..b8cd92cf --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_case_from_contract.xml @@ -0,0 +1,129 @@ + + + + 4.0.0 + + com.blogspot.toomuchcoding.frauddetection + frauddetection + 1.2.2.BUILD-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.3.5.RELEASE + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + ch.qos.logback + logback-classic + + + + + com.jayway.restassured + rest-assured + 2.9.0 + test + + + com.jayway.restassured + spring-mock-mvc + 2.9.0 + test + + + com.toomuchcoding.jsonassert + jsonassert + 0.4.10 + test + + + org.assertj + assertj-core + 2.4.0 + test + + + + + 1.8 + ${it-plugin.version} + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.springframework.cloud + spring-cloud-contract-maven-plugin + ${spring-cloud-verifier-plugin.version} + + + + convert + generateStubs + generateTests + + + src/test/contracts + com.blogspot.toomuchcoding.frauddetection + MOCKMVC + JUNIT + stubs + Test + org.junit.rules.ErrorCollector + + com.blogspot.toomuchcoding.frauddetection.matchers.CustomMatchers.* + + + com.blogspot.toomuchcoding.frauddetection.matchers.CustomMatchers + + + broken** + + + shouldMarkClientAsFraud.groovy + + + + + + com.blogspot.toomuchcoding.frauddetection.BaseAccurest + + + + + + diff --git a/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group.xml b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group.xml new file mode 100644 index 00000000..1607f71b --- /dev/null +++ b/spring-cloud-release-tools-core/src/test/resources/projects/project/children/pom_different_group.xml @@ -0,0 +1,40 @@ + + + + + 4.0.0 + + com.example + http-server-dsl + 1.2.2.BUILD-SNAPSHOT + + Spring Cloud Contract Verifier Http Server Sample + Spring Cloud Contract Verifier Http Server Sample + + + org.springframework.boot + spring-boot-starter-parent + 1.5.8.RELEASE + + + + + 1.3.1.BUILD-SNAPSHOT + +