diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java index 59052c70..867e40f1 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForBranchPhase.java @@ -28,7 +28,6 @@ import java.nio.file.Paths; import java.util.Map; -import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.model.Model; import org.apache.maven.model.Scm; import org.apache.maven.project.MavenProject; @@ -82,24 +81,21 @@ protected void transformScm( throw new ReleaseExecutionException(e.getMessage(), e); } } else { - MavenProject parent = project.getParent(); - if (parent != null) { - // If the SCM element is not present, only add it if the parent was not mapped (ie, it's external to - // the release process and so has not been modified, so the values will not be correct on the tag), - String parentId = ArtifactUtils.versionlessKey(parent.getGroupId(), parent.getArtifactId()); - if (!releaseDescriptor.hasOriginalScmInfo(parentId)) { - // we need to add it, since it has changed from the inherited value - scmRoot = new Scm(); - // reset default value (HEAD) - scmRoot.setTag(null); - - try { - if (translateScm(project, releaseDescriptor, scmRoot, scmRepository, result)) { - modelTarget.setScm(scmRoot); - } - } catch (IOException e) { - throw new ReleaseExecutionException(e.getMessage(), e); + // If the SCM element is not present, only add it if the parent was not mapped (ie, it's external to + // the release process and so has not been modified, + // so the values otherwise won't be correct on the tag), + if (ReleaseUtil.hasNoOriginalScmInfoInParents(project, releaseDescriptor)) { + // we need to add it, since it has changed from the inherited value + scmRoot = new Scm(); + // reset default value (HEAD) + scmRoot.setTag(null); + + try { + if (translateScm(project, releaseDescriptor, scmRoot, scmRepository, result)) { + modelTarget.setScm(scmRoot); } + } catch (IOException e) { + throw new ReleaseExecutionException(e.getMessage(), e); } } } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java index 67b9f18c..c559a41b 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/RewritePomsForReleasePhase.java @@ -28,7 +28,6 @@ import java.nio.file.Paths; import java.util.Map; -import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.model.Model; import org.apache.maven.model.Scm; import org.apache.maven.project.MavenProject; @@ -81,24 +80,21 @@ protected void transformScm( throw new ReleaseExecutionException(e.getMessage(), e); } } else { - MavenProject parent = project.getParent(); - if (parent != null) { - // If the SCM element is not present, only add it if the parent was not mapped (ie, it's external to - // the release process and so has not been modified, so the values will not be correct on the tag), - String parentId = ArtifactUtils.versionlessKey(parent.getGroupId(), parent.getArtifactId()); - if (!releaseDescriptor.hasOriginalScmInfo(parentId)) { - // we need to add it, since it has changed from the inherited value - Scm scmTarget = new Scm(); - // reset default value (HEAD) - scmTarget.setTag(null); - - try { - if (translateScm(project, releaseDescriptor, scmTarget, scmRepository, result)) { - modelTarget.setScm(scmTarget); - } - } catch (IOException e) { - throw new ReleaseExecutionException(e.getMessage(), e); + // If the SCM element is not present, only add it if the parent was not mapped (ie, it's external to + // the release process and so has not been modified, + // so the values otherwise won't be correct on the tag), + if (ReleaseUtil.hasNoOriginalScmInfoInParents(project, releaseDescriptor)) { + // we need to add it, since it has changed from the inherited value + Scm scmTarget = new Scm(); + // reset default value (HEAD) + scmTarget.setTag(null); + + try { + if (translateScm(project, releaseDescriptor, scmTarget, scmRepository, result)) { + modelTarget.setScm(scmTarget); } + } catch (IOException e) { + throw new ReleaseExecutionException(e.getMessage(), e); } } } diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java index 3fcd7f2a..a37a3bdf 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/util/ReleaseUtil.java @@ -26,6 +26,7 @@ import java.util.Arrays; import java.util.List; +import org.apache.maven.artifact.ArtifactUtils; import org.apache.maven.model.Model; import org.apache.maven.project.MavenProject; import org.apache.maven.shared.release.ReleaseExecutionException; @@ -204,4 +205,20 @@ public static String interpolate(String value, Model model) throws ReleaseExecut } return value; } + + /** + * Check if none of the parent projects have original SCM info in the release descriptor. + */ + public static boolean hasNoOriginalScmInfoInParents(MavenProject project, ReleaseDescriptor releaseDescriptor) { + MavenProject parent = project.getParent(); + while (parent != null) { + String parentId = ArtifactUtils.versionlessKey(parent.getGroupId(), parent.getArtifactId()); + if (releaseDescriptor.hasOriginalScmInfo(parentId)) { + return false; + } + parent = parent.getParent(); + } + + return true; + } } diff --git a/maven-release-plugin/src/it/projects/branch/gh-1420/module1/module2/pom.xml b/maven-release-plugin/src/it/projects/branch/gh-1420/module1/module2/pom.xml new file mode 100644 index 00000000..0efb1598 --- /dev/null +++ b/maven-release-plugin/src/it/projects/branch/gh-1420/module1/module2/pom.xml @@ -0,0 +1,31 @@ + + + + 4.0.0 + + org.codehaus.maven.plugins.release.its + module1 + 1.0-SNAPSHOT + + module2 + pom + + diff --git a/maven-release-plugin/src/it/projects/branch/gh-1420/module1/pom.xml b/maven-release-plugin/src/it/projects/branch/gh-1420/module1/pom.xml new file mode 100644 index 00000000..8b0c7b1a --- /dev/null +++ b/maven-release-plugin/src/it/projects/branch/gh-1420/module1/pom.xml @@ -0,0 +1,37 @@ + + + + 4.0.0 + + org.codehaus.maven.plugins.release.its + gh-1420 + 1.0-SNAPSHOT + + + module1 + + pom + + + module2 + + + diff --git a/maven-release-plugin/src/it/projects/branch/gh-1420/pom.xml b/maven-release-plugin/src/it/projects/branch/gh-1420/pom.xml new file mode 100644 index 00000000..897f0486 --- /dev/null +++ b/maven-release-plugin/src/it/projects/branch/gh-1420/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + org.codehaus.maven.plugins.release.its + gh-1420 + 1.0-SNAPSHOT + pom + + https://github.com/apache/maven-release/issues/1420 + Check whether the child modules do not have an SCM tag + + + scm:git|sd_pa/tools/release-test + HEAD + + + + + + org.apache.maven.plugins + maven-release-plugin + @project.version@ + + + + + + module1 + + diff --git a/maven-release-plugin/src/it/projects/branch/gh-1420/verify.groovy b/maven-release-plugin/src/it/projects/branch/gh-1420/verify.groovy new file mode 100644 index 00000000..086f8a18 --- /dev/null +++ b/maven-release-plugin/src/it/projects/branch/gh-1420/verify.groovy @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import groovy.xml.XmlSlurper + +def pom = new XmlSlurper().parse( new File( basedir, 'pom.xml.branch' ) ) +assert pom.scm.tag.text() == 'gh-1420-1.0-SNAPSHOT' +assert pom.version.text() == '1.0-SNAPSHOT' + +def pomNext = new XmlSlurper().parse( new File( basedir, 'pom.xml.next' ) ) +assert pomNext.scm.tag.text() == 'HEAD' +assert pomNext.version.text() == '1.1-SNAPSHOT' + +def pom1 = new XmlSlurper().parse( new File( basedir, 'module1/pom.xml.branch' ) ) +assert pom1.scm.size() == 0 +assert pom1.parent.version.text() == '1.0-SNAPSHOT' + +def pom1Next = new XmlSlurper().parse( new File( basedir, 'module1/pom.xml.next' ) ) +assert pom1Next.scm.size() == 0 +assert pom1Next.parent.version.text() == '1.1-SNAPSHOT' + +def pom2 = new XmlSlurper().parse( new File( basedir, 'module1/module2/pom.xml.branch' ) ) +assert pom2.scm.size() == 0 +assert pom2.parent.version.text() == '1.0-SNAPSHOT' + +def pom2Next = new XmlSlurper().parse( new File( basedir, 'module1/module2/pom.xml.next' ) ) +assert pom2Next.scm.size() == 0 +assert pom2Next.parent.version.text() == '1.1-SNAPSHOT' diff --git a/maven-release-plugin/src/it/projects/prepare/gh-1420/module1/module2/pom.xml b/maven-release-plugin/src/it/projects/prepare/gh-1420/module1/module2/pom.xml new file mode 100644 index 00000000..0efb1598 --- /dev/null +++ b/maven-release-plugin/src/it/projects/prepare/gh-1420/module1/module2/pom.xml @@ -0,0 +1,31 @@ + + + + 4.0.0 + + org.codehaus.maven.plugins.release.its + module1 + 1.0-SNAPSHOT + + module2 + pom + + diff --git a/maven-release-plugin/src/it/projects/prepare/gh-1420/module1/pom.xml b/maven-release-plugin/src/it/projects/prepare/gh-1420/module1/pom.xml new file mode 100644 index 00000000..8b0c7b1a --- /dev/null +++ b/maven-release-plugin/src/it/projects/prepare/gh-1420/module1/pom.xml @@ -0,0 +1,37 @@ + + + + 4.0.0 + + org.codehaus.maven.plugins.release.its + gh-1420 + 1.0-SNAPSHOT + + + module1 + + pom + + + module2 + + + diff --git a/maven-release-plugin/src/it/projects/prepare/gh-1420/pom.xml b/maven-release-plugin/src/it/projects/prepare/gh-1420/pom.xml new file mode 100644 index 00000000..897f0486 --- /dev/null +++ b/maven-release-plugin/src/it/projects/prepare/gh-1420/pom.xml @@ -0,0 +1,50 @@ + + + + 4.0.0 + + org.codehaus.maven.plugins.release.its + gh-1420 + 1.0-SNAPSHOT + pom + + https://github.com/apache/maven-release/issues/1420 + Check whether the child modules do not have an SCM tag + + + scm:git|sd_pa/tools/release-test + HEAD + + + + + + org.apache.maven.plugins + maven-release-plugin + @project.version@ + + + + + + module1 + + diff --git a/maven-release-plugin/src/it/projects/prepare/gh-1420/verify.groovy b/maven-release-plugin/src/it/projects/prepare/gh-1420/verify.groovy new file mode 100644 index 00000000..66ac2982 --- /dev/null +++ b/maven-release-plugin/src/it/projects/prepare/gh-1420/verify.groovy @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import groovy.xml.XmlSlurper + +def pom = new XmlSlurper().parse( new File( basedir, 'pom.xml.tag' ) ) +assert pom.scm.tag.text() == 'gh-1420-1.0' +assert pom.version.text() == '1.0' + +def pomNext = new XmlSlurper().parse( new File( basedir, 'pom.xml.next' ) ) +assert pomNext.scm.tag.text() == 'HEAD' +assert pomNext.version.text() == '1.1-SNAPSHOT' + +def pom1 = new XmlSlurper().parse( new File( basedir, 'module1/pom.xml.tag' ) ) +assert pom1.scm.size() == 0 +assert pom1.parent.version.text() == '1.0' + +def pom1Next = new XmlSlurper().parse( new File( basedir, 'module1/pom.xml.next' ) ) +assert pom1Next.scm.size() == 0 +assert pom1Next.parent.version.text() == '1.1-SNAPSHOT' + +def pom2 = new XmlSlurper().parse( new File( basedir, 'module1/module2/pom.xml.tag' ) ) +assert pom2.scm.size() == 0 +assert pom2.parent.version.text() == '1.0' + +def pom2Next = new XmlSlurper().parse( new File( basedir, 'module1/module2/pom.xml.next' ) ) +assert pom2Next.scm.size() == 0 +assert pom2Next.parent.version.text() == '1.1-SNAPSHOT'