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' ) )

Reply via email to