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'