This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch feature/ci-friendly-complex-expressions in repository https://gitbox.apache.org/repos/asf/maven-release.git
commit 39d00078f9fd7682749698277065754349ce96ef Author: mkolesnikov <mikhail_kolesni...@outlook.com> AuthorDate: Wed Jun 5 03:21:12 2024 +0300 MRELEASE-1109 Using scmRevision as sha1 value if the property defined but nothing was provided by a user --- .../shared/release/transform/jdom2/JDomModel.java | 17 +++++++++-------- .../release/transform/jdom2/JDomModelETL.java | 2 +- .../shared/release/util/CiFriendlyVersion.java | 22 +++++++++++++++++++--- .../release/transform/jdom2/JDomModelTest.java | 15 ++++++++------- .../ci-friendly-multi-module/invoker.properties | 2 +- .../prepare/ci-friendly-multi-module/verify.groovy | 2 +- 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModel.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModel.java index c60d9936..c6b153d9 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModel.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModel.java @@ -31,7 +31,7 @@ import org.apache.maven.model.Parent; import org.apache.maven.model.Profile; import org.apache.maven.model.Reporting; import org.apache.maven.model.Scm; -import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.release.config.ReleaseDescriptor; import org.apache.maven.shared.release.util.CiFriendlyVersion; import org.jdom2.Document; import org.jdom2.Element; @@ -49,17 +49,18 @@ public class JDomModel extends Model { private final JDomModelBase modelBase; /** - * The currently running MavenProject + * The ReleaseDescriptor after a commit performed + * */ - private final MavenProject mavenProject; + private final ReleaseDescriptor releaseDescriptor; /** * <p>Constructor for JDomModel.</p> * * @param document a {@link org.jdom2.Document} object */ - public JDomModel(Document document, MavenProject mavenProject) { - this(document.getRootElement(), mavenProject); + public JDomModel(Document document, ReleaseDescriptor releaseDescriptor) { + this(document.getRootElement(), releaseDescriptor); } /** @@ -67,9 +68,9 @@ public class JDomModel extends Model { * * @param project a {@link org.jdom2.Element} object */ - public JDomModel(Element project, MavenProject mavenProject) { + public JDomModel(Element project, ReleaseDescriptor releaseDescriptor) { this.project = project; - this.mavenProject = mavenProject; + this.releaseDescriptor = releaseDescriptor; this.modelBase = new JDomModelBase(project); } @@ -205,7 +206,7 @@ public class JDomModel extends Model { version, versionElement.getTextNormalize(), (JDomProperties) getProperties(), - mavenProject.getProperties()); + releaseDescriptor); } else { JDomUtils.rewriteValue(versionElement, version); } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModelETL.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModelETL.java index e8d74096..640f574e 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModelETL.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomModelETL.java @@ -159,7 +159,7 @@ public class JDomModelETL implements ModelETL { @Override public Model getModel() { - return new JDomModel(document, project); + return new JDomModel(document, releaseDescriptor); } private void normaliseLineEndings(Document document) { diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/CiFriendlyVersion.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/CiFriendlyVersion.java index 406b015a..3eaeaa92 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/CiFriendlyVersion.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/CiFriendlyVersion.java @@ -20,12 +20,12 @@ package org.apache.maven.shared.release.util; import java.util.Arrays; import java.util.HashSet; -import java.util.Properties; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.maven.artifact.ArtifactUtils; +import org.apache.maven.shared.release.config.ReleaseDescriptor; import org.apache.maven.shared.release.transform.jdom2.JDomProperties; public class CiFriendlyVersion { @@ -72,11 +72,11 @@ public class CiFriendlyVersion { } public static void rewriteVersionAndProperties( - String version, String versionElement, JDomProperties jDomProperties, Properties mavenProperties) { + String version, String versionElement, JDomProperties jDomProperties, ReleaseDescriptor releaseDescriptor) { // try to rewrite property if CI friendly expression is used String ciFriendlyPropertyName = extractPropertyFromExpression(versionElement); if (jDomProperties != null) { - String sha1 = jDomProperties.getProperty(SHA1, mavenProperties.getProperty(SHA1, "")); + String sha1 = resolveSha1Property(jDomProperties, releaseDescriptor); // assume that everybody follows the example and properties are simply chained // and the changelist can only be '-SNAPSHOT' if (ArtifactUtils.isSnapshot(version)) { @@ -87,13 +87,29 @@ public class CiFriendlyVersion { } else { jDomProperties.setProperty(ciFriendlyPropertyName, version.replace(sha1, "")); } + if (jDomProperties.containsKey(SHA1)) { + // drop the value for the next version + jDomProperties.setProperty(SHA1, ""); + } } else { jDomProperties.setProperty( ciFriendlyPropertyName, version.replace(sha1, "").replace(SNAPSHOT, "")); if (jDomProperties.containsKey(CHANGELIST)) { jDomProperties.setProperty(CHANGELIST, ""); } + if (jDomProperties.containsKey(SHA1) && !sha1.isEmpty()) { + // we need this to restore the revision for the next development + // or release:prepare should provide sha1 after a commit + // or a user should provide it as an additional `arguments` in plugin configuration + // see maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module + jDomProperties.setProperty(SHA1, sha1); + } } } } + + private static String resolveSha1Property(JDomProperties jDomProperties, ReleaseDescriptor releaseDescriptor) { + String scmVersion = releaseDescriptor.getScmReleasedPomRevision(); + return jDomProperties.getProperty(SHA1, System.getProperty(SHA1, scmVersion == null ? "" : scmVersion)); + } } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/transform/jdom2/JDomModelTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/transform/jdom2/JDomModelTest.java index 5849121c..3967274b 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/transform/jdom2/JDomModelTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/transform/jdom2/JDomModelTest.java @@ -22,7 +22,8 @@ import java.io.StringReader; import org.apache.maven.model.Model; import org.apache.maven.model.Scm; -import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.release.config.ReleaseDescriptor; +import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; @@ -34,20 +35,20 @@ import static org.junit.Assert.assertNull; public class JDomModelTest { private SAXBuilder builder = new SAXBuilder(); - private MavenProject mavenProject = new MavenProject(); + private ReleaseDescriptor releaseDescriptor = new ReleaseDescriptorBuilder().build(); @Test public void testGetScm() throws Exception { String content = "<project></project>"; Document document = builder.build(new StringReader(content)); - assertNull(new JDomModel(document, mavenProject).getScm()); + assertNull(new JDomModel(document, releaseDescriptor).getScm()); } @Test public void testSetScm() throws Exception { String content = "<project></project>"; Document document = builder.build(new StringReader(content)); - Model model = new JDomModel(document, mavenProject); + Model model = new JDomModel(document, releaseDescriptor); assertNull(model.getScm()); model.setScm(new Scm()); @@ -61,7 +62,7 @@ public class JDomModelTest { public void testSetVersion() throws Exception { String content = "<project></project>"; Element projectElm = builder.build(new StringReader(content)).getRootElement(); - Model model = new JDomModel(projectElm, mavenProject); + Model model = new JDomModel(projectElm, releaseDescriptor); assertNull(model.getVersion()); model.setVersion("VERSION"); @@ -73,7 +74,7 @@ public class JDomModelTest { // inherit from parent via CI friendly content = "<project><parent><version>${revision}${changelist}</version></parent></project>"; projectElm = builder.build(new StringReader(content)).getRootElement(); - model = new JDomModel(projectElm, mavenProject); + model = new JDomModel(projectElm, releaseDescriptor); assertNull(model.getVersion()); model.setVersion("PARENT_VERSION"); assertNull(getVersion(projectElm)); @@ -81,7 +82,7 @@ public class JDomModelTest { // this business logic might need to moved. content = "<project><parent><version>PARENT_VERSION</version></parent></project>"; projectElm = builder.build(new StringReader(content)).getRootElement(); - model = new JDomModel(projectElm, mavenProject); + model = new JDomModel(projectElm, releaseDescriptor); assertNull(model.getVersion()); model.setVersion("PARENT_VERSION"); diff --git a/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/invoker.properties b/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/invoker.properties index 0f980493..65218864 100644 --- a/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/invoker.properties +++ b/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/invoker.properties @@ -16,4 +16,4 @@ # under the License. invoker.goals=release:clean release:prepare -invoker.mavenOpts=-Dsha1=-123 \ No newline at end of file +invoker.mavenOpts=-Dsha1=-abcdef12 -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 \ No newline at end of file diff --git a/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/verify.groovy b/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/verify.groovy index 4486794e..febfa0ce 100644 --- a/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/verify.groovy +++ b/maven-release-plugin/src/it/projects/prepare/ci-friendly-multi-module/verify.groovy @@ -26,7 +26,7 @@ assert buildLog.exists() def projectRootTag = new XmlSlurper().parse( new File( basedir, 'pom.xml.tag' ) ) assert projectRootTag.version.text() == '${revision}${sha1}${changelist}' assert projectRootTag.properties.revision.text() == "1.0" -assert projectRootTag.properties.sha1.text() == "" +assert projectRootTag.properties.sha1.text() == "-abcdef12" assert projectRootTag.properties.changelist.text() == "" def projectATag = new XmlSlurper().parse( new File( basedir, 'module-a/pom.xml.tag' ) )