Skip to content

Commit

Permalink
[MRELEASE-1054] Support for excluding submodules changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
wuwen5 committed Dec 10, 2024
1 parent 5ed2bcc commit e236be7
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
*/
package org.apache.maven.shared.release.phase;

import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.project.MavenProject;
Expand Down Expand Up @@ -97,6 +101,8 @@ public abstract class AbstractMapVersionsPhase extends AbstractReleasePhase {
*/
private final boolean convertToBranch;

private final Set<String> exclusionPatterns = new HashSet<>();

public AbstractMapVersionsPhase(
ScmRepositoryConfigurator scmRepositoryConfigurator,
Prompter prompter,
Expand All @@ -118,6 +124,12 @@ public ReleaseResult execute(
throws ReleaseExecutionException {
ReleaseResult result = new ReleaseResult();

List<String> additionalExcludes = releaseDescriptor.getCheckModificationExcludes();

if (additionalExcludes != null) {
exclusionPatterns.addAll(additionalExcludes);
}

MavenProject rootProject = ReleaseUtil.getRootProject(reactorProjects);

if (releaseDescriptor.isAutoVersionSubmodules() && ArtifactUtils.isSnapshot(rootProject.getVersion())) {
Expand Down Expand Up @@ -165,17 +177,31 @@ public ReleaseResult execute(
}
}
} else {

for (MavenProject project : reactorProjects) {
String projectId = ArtifactUtils.versionlessKey(project.getGroupId(), project.getArtifactId());

String nextVersion = resolveNextVersion(project, projectId, releaseDescriptor, releaseEnvironment);

if (!convertToSnapshot) {
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
} else if (releaseDescriptor.isBranchCreation() && convertToBranch) {
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
} else {
releaseDescriptor.addDevelopmentVersion(projectId, nextVersion);
boolean isExcludedPathFound = false;
if (project.getFile() != null) {
final String path = project.getFile().getPath();
for (String exclusionPattern : exclusionPatterns) {
if (FileSystems.getDefault()
.getPathMatcher("glob:" + exclusionPattern)
.matches(Paths.get(path))) {
isExcludedPathFound = true;
break;
}
}
}
if (!isExcludedPathFound) {
String nextVersion = resolveNextVersion(project, projectId, releaseDescriptor, releaseEnvironment);
if (!convertToSnapshot) {
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
} else if (releaseDescriptor.isBranchCreation() && convertToBranch) {
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
} else {
releaseDescriptor.addDevelopmentVersion(projectId, nextVersion);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,19 @@
package org.apache.maven.shared.release.phase;

import java.io.File;
import java.net.URI;
import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -106,6 +109,8 @@ public abstract class AbstractRewritePomsPhase extends AbstractReleasePhase impl

private long startTime = -1 * 1000;

private final Set<String> exclusionPatterns = new HashSet<>();

protected AbstractRewritePomsPhase(
ScmRepositoryConfigurator scmRepositoryConfigurator,
Map<String, ModelETLFactory> modelETLFactories,
Expand Down Expand Up @@ -157,6 +162,12 @@ public ReleaseResult execute(
throws ReleaseExecutionException, ReleaseFailureException {
ReleaseResult result = new ReleaseResult();

List<String> additionalExcludes = releaseDescriptor.getCheckModificationExcludes();

if (additionalExcludes != null) {
exclusionPatterns.addAll(additionalExcludes);
}

transform(releaseDescriptor, releaseEnvironment, reactorProjects, false, result);

result.setResultCode(ReleaseResult.SUCCESS);
Expand Down Expand Up @@ -210,17 +221,19 @@ private void transform(
throws ReleaseExecutionException, ReleaseFailureException {
result.setStartTime((startTime >= 0) ? startTime : System.currentTimeMillis());

URI root = ReleaseUtil.getRootProject(reactorProjects).getBasedir().toURI();

for (MavenProject project : reactorProjects) {
URI pom = project.getFile().toURI();
logInfo(
result,
"Transforming " + root.relativize(pom).getPath() + ' '
+ buffer().project(project.getArtifactId()) + " '" + project.getName() + "'"
+ (simulate ? " with ." + getPomSuffix() + " suffix" : "") + "...");
final String path = project.getFile().getPath();
if (exclusionPatterns.stream().noneMatch(exclusionPattern -> FileSystems.getDefault()
.getPathMatcher("glob:" + exclusionPattern)
.matches(Paths.get(path)))) {
logDebug(
result,
"Transforming " + path + ' '
+ buffer().project(project.getArtifactId()) + " '" + project.getName() + "'"
+ (simulate ? " with ." + getPomSuffix() + " suffix" : "") + "...");

transformProject(project, releaseDescriptor, releaseEnvironment, simulate, result);
transformProject(project, releaseDescriptor, releaseEnvironment, simulate, result);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,13 @@
package org.apache.maven.shared.release.phase;

import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.maven.project.MavenProject;
import org.apache.maven.scm.ScmException;
Expand Down Expand Up @@ -61,6 +65,8 @@ public abstract class AbstractScmCommitPhase extends AbstractReleasePhase {
*/
protected final String descriptorCommentGetter;

private final Set<String> exclusionPatterns = new HashSet<>();

protected AbstractScmCommitPhase(
ScmRepositoryConfigurator scmRepositoryConfigurator, String descriptorCommentGetter) {
this.scmRepositoryConfigurator = requireNonNull(scmRepositoryConfigurator);
Expand All @@ -77,6 +83,12 @@ public ReleaseResult execute(

validateConfiguration(releaseDescriptor);

List<String> additionalExcludes = releaseDescriptor.getCheckModificationExcludes();

if (additionalExcludes != null) {
exclusionPatterns.addAll(additionalExcludes);
}

runLogic(releaseDescriptor, releaseEnvironment, reactorProjects, relResult, false);

relResult.setResultCode(ReleaseResult.SUCCESS);
Expand Down Expand Up @@ -166,9 +178,12 @@ protected void performCheckins(
}
} else {
List<File> pomFiles = createPomFiles(releaseDescriptor, reactorProjects);
ScmFileSet fileSet = new ScmFileSet(new File(releaseDescriptor.getWorkingDirectory()), pomFiles);

checkin(provider, repository, fileSet, releaseDescriptor, message);
if (!pomFiles.isEmpty()) {
ScmFileSet fileSet = new ScmFileSet(new File(releaseDescriptor.getWorkingDirectory()), pomFiles);

checkin(provider, repository, fileSet, releaseDescriptor, message);
}
}
}

Expand Down Expand Up @@ -288,11 +303,25 @@ protected static List<File> createPomFiles(ReleaseDescriptor releaseDescriptor,
* @param reactorProjects a {@link java.util.List} object
* @return a {@link java.util.List} object
*/
protected static List<File> createPomFiles(
ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects) {
protected List<File> createPomFiles(ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects) {

List<File> pomFiles = new ArrayList<>();
for (MavenProject project : reactorProjects) {
pomFiles.addAll(createPomFiles(releaseDescriptor, project));

final String path = project.getFile().getPath();

boolean isExcludedPathFound = false;
for (String exclusionPattern : exclusionPatterns) {
if (FileSystems.getDefault()
.getPathMatcher("glob:" + exclusionPattern)
.matches(Paths.get(path))) {
isExcludedPathFound = true;
break;
}
}
if (!isExcludedPathFound) {
pomFiles.addAll(createPomFiles(releaseDescriptor, project));
}
}
return pomFiles;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/
package org.apache.maven.shared.release.phase;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -2447,11 +2448,44 @@ public void testUpdateDevelopmentInvalidDefaultDevelopmentVersion_NonInteractive
}
}

@Test
public void testSimulateRelease_CheckModificationExcludes() throws Exception {
// verify
MapReleaseVersionsPhase phase =
new MapReleaseVersionsPhase(scmRepositoryConfigurator, mockPrompter, versionPolicies);

List<MavenProject> reactorProjects = Collections.singletonList(createProjectWithPomFile("artifactId", "1.2"));

ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
builder.setCheckModificationExcludes(Collections.singletonList("**/pom1.xml"));

// test
phase.simulate(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);

// verify
assertNull(
"Check release versions",
ReleaseUtils.buildReleaseDescriptor(builder).getProjectReleaseVersion("groupId:artifactId"));
assertNull(
"Check development versions",
ReleaseUtils.buildReleaseDescriptor(builder).getProjectDevelopmentVersion("groupId:artifactId"));
}

private static MavenProject createProject(String artifactId, String version) {
Model model = new Model();
model.setGroupId("groupId");
model.setArtifactId(artifactId);
model.setVersion(version);
return new MavenProject(model);
}

private static MavenProject createProjectWithPomFile(String artifactId, String version) {
Model model = new Model();
model.setGroupId("groupId");
model.setArtifactId(artifactId);
model.setVersion(version);
MavenProject mavenProject = new MavenProject(model);
mavenProject.setFile(new File("src/test/resources/pomfinder/pom1.xml"));
return mavenProject;
}
}

0 comments on commit e236be7

Please sign in to comment.