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 008a76669c97fcfea7302f6aab0abfa775e40fbc
Author: mkolesnikov <mikhail_kolesni...@outlook.com>
AuthorDate: Thu Nov 30 18:22:51 2023 +0300

    MRELEASE-1109 single revision property
---
 .../shared/release/transform/jdom2/JDomModel.java  |  5 +--
 .../release/transform/jdom2/JDomProperties.java    |  3 ++
 .../maven/shared/release/util/MavenExpression.java |  6 ++--
 .../phase/RewritePomsForReleasePhaseTest.java      | 13 ++++++++
 .../expected-pom.xml                               | 39 ++++++++++++++++++++++
 .../pom.xml                                        | 39 ++++++++++++++++++++++
 .../subproject1/expected-pom.xml                   | 28 ++++++++++++++++
 .../subproject1/pom.xml                            | 28 ++++++++++++++++
 8 files changed, 156 insertions(+), 5 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 949ce594..4c131d21 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
@@ -202,11 +202,12 @@ public class JDomModel extends Model {
                     String sha1 = properties.getProperty("sha1", "");
                     String changelist = properties.getProperty("changelist", 
"");
                     properties.setProperty(
-                            ciFriendlyPropertyName, version.replaceAll(sha1, 
"").replaceAll(changelist, ""));
+                            ciFriendlyPropertyName,
+                            // assume that everybody follows the example and 
properties are simply chained
+                            version.replaceAll(sha1, 
"").replaceAll(changelist, ""));
                     if (ArtifactUtils.isSnapshot(version)) {
                         properties.setProperty("changelist", changelist);
                     } else {
-                        properties.setProperty(ciFriendlyPropertyName, 
version);
                         properties.setProperty("changelist", "");
                     }
                 }
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomProperties.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomProperties.java
index 6a560649..0ffac318 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomProperties.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/transform/jdom2/JDomProperties.java
@@ -54,6 +54,9 @@ public class JDomProperties extends Properties {
     public synchronized Object setProperty(String key, String value) {
         Element property = properties.getChild(key, properties.getNamespace());
 
+        if (property == null) {
+            property = new Element(key, properties.getNamespace());
+        }
         JDomUtils.rewriteValue(property, value);
 
         // todo follow specs of Hashtable.put
diff --git 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/MavenExpression.java
 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/MavenExpression.java
index 6986cdb8..4976efb1 100644
--- 
a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/MavenExpression.java
+++ 
b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/MavenExpression.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.shared.release.util;
 
-import java.util.Properties;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -30,12 +30,12 @@ public class MavenExpression {
 
     private MavenExpression() {}
 
-    public static String evaluate(String expression, Properties properties) {
+    public static String evaluate(String expression, Map<?, ?> properties) {
         StringBuilder result = new StringBuilder(expression);
         Matcher matcher = EXPRESSION_PATTERN.matcher(result);
         while (matcher.find()) {
             String propertyName = matcher.group(1);
-            String propertyValue = properties.getProperty(propertyName);
+            Object propertyValue = properties.get(propertyName);
             result.replace(matcher.start(), matcher.end(), 
String.valueOf(propertyValue));
             matcher.reset();
         }
diff --git 
a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java
 
b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java
index ee71ff20..7813605b 100644
--- 
a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java
+++ 
b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhaseTest.java
@@ -335,6 +335,19 @@ public class RewritePomsForReleasePhaseTest extends 
AbstractEditModeRewritingRel
         assertTrue(comparePomFiles(reactorProjects));
     }
 
+    @Test
+    public void testRewritePomWithCiFriendlyReactorWithOnlyRevision() throws 
Exception {
+        List<MavenProject> reactorProjects = 
createReactorProjects("pom-with-parent-and-cifriendly-revision");
+
+        ReleaseDescriptorBuilder builder =
+                createDescriptorFromProjects(reactorProjects, 
"pom-with-parent-and-cifriendly-revision");
+        builder.addReleaseVersion("groupId:artifactId", NEXT_VERSION);
+        builder.addReleaseVersion("groupId:subproject1", NEXT_VERSION);
+        phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new 
DefaultReleaseEnvironment(), reactorProjects);
+
+        assertTrue(comparePomFiles(reactorProjects));
+    }
+
     // MRELEASE-311
     @Test
     public void testRewritePomWithDependencyPropertyCoordinate() throws 
Exception {
diff --git 
a/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/expected-pom.xml
 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/expected-pom.xml
new file mode 100644
index 00000000..b4326d54
--- /dev/null
+++ 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/expected-pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>groupId</groupId>
+  <artifactId>artifactId</artifactId>
+  <version>${revision}</version>
+  <packaging>pom</packaging>
+
+  <scm>
+    
<connection>scm:svn:file://localhost/tmp/scm-repo/tags/release-label</connection>
+    
<developerConnection>scm:svn:file://localhost/tmp/scm-repo/tags/release-label</developerConnection>
+    <url>file://localhost/tmp/scm-repo/tags/release-label</url>
+  </scm>
+
+  <properties>
+    <revision>1.0</revision>
+  </properties>
+
+  <modules>
+    <module>subproject1</module>
+  </modules>
+</project>
diff --git 
a/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/pom.xml
 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/pom.xml
new file mode 100644
index 00000000..0c9bd8b2
--- /dev/null
+++ 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>groupId</groupId>
+  <artifactId>artifactId</artifactId>
+  <version>${revision}</version>
+  <packaging>pom</packaging>
+
+  <scm>
+    <connection>scm:svn:file://localhost/tmp/scm-repo/trunk</connection>
+    
<developerConnection>scm:svn:file://localhost/tmp/scm-repo/trunk</developerConnection>
+    <url>file://localhost/tmp/scm-repo/trunk</url>
+  </scm>
+
+  <properties>
+    <revision>1.0-SNAPSHOT</revision>
+  </properties>
+
+  <modules>
+    <module>subproject1</module>
+  </modules>
+</project>
diff --git 
a/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/subproject1/expected-pom.xml
 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/subproject1/expected-pom.xml
new file mode 100644
index 00000000..7b2fa88c
--- /dev/null
+++ 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/subproject1/expected-pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>groupId</groupId>
+    <artifactId>artifactId</artifactId>
+    <version>${revision}</version>
+  </parent>
+
+  <artifactId>subproject1</artifactId>
+</project>
diff --git 
a/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/subproject1/pom.xml
 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/subproject1/pom.xml
new file mode 100644
index 00000000..7b2fa88c
--- /dev/null
+++ 
b/maven-release-manager/src/test/resources/projects/rewrite-for-release/pom-with-parent-and-cifriendly-revision/subproject1/pom.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>groupId</groupId>
+    <artifactId>artifactId</artifactId>
+    <version>${revision}</version>
+  </parent>
+
+  <artifactId>subproject1</artifactId>
+</project>

Reply via email to