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>