Skip to content

Commit 09f25d4

Browse files
committed
[MRELEASE-1054] Support for excluding submodules changes.
1 parent 9e0713b commit 09f25d4

File tree

5 files changed

+99
-23
lines changed

5 files changed

+99
-23
lines changed

maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractMapVersionsPhase.java

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818
*/
1919
package org.apache.maven.shared.release.phase;
2020

21+
import java.nio.file.FileSystems;
22+
import java.nio.file.Paths;
23+
import java.util.HashSet;
2124
import java.util.List;
2225
import java.util.Map;
26+
import java.util.Set;
2327

2428
import org.apache.maven.artifact.ArtifactUtils;
2529
import org.apache.maven.project.MavenProject;
@@ -97,6 +101,8 @@ public abstract class AbstractMapVersionsPhase extends AbstractReleasePhase {
97101
*/
98102
private final boolean convertToBranch;
99103

104+
private final Set<String> exclusionPatterns = new HashSet<>();
105+
100106
public AbstractMapVersionsPhase(
101107
ScmRepositoryConfigurator scmRepositoryConfigurator,
102108
Prompter prompter,
@@ -118,6 +124,12 @@ public ReleaseResult execute(
118124
throws ReleaseExecutionException {
119125
ReleaseResult result = new ReleaseResult();
120126

127+
List<String> additionalExcludes = releaseDescriptor.getCheckModificationExcludes();
128+
129+
if (additionalExcludes != null) {
130+
exclusionPatterns.addAll(additionalExcludes);
131+
}
132+
121133
MavenProject rootProject = ReleaseUtil.getRootProject(reactorProjects);
122134

123135
if (releaseDescriptor.isAutoVersionSubmodules() && ArtifactUtils.isSnapshot(rootProject.getVersion())) {
@@ -165,17 +177,31 @@ public ReleaseResult execute(
165177
}
166178
}
167179
} else {
180+
168181
for (MavenProject project : reactorProjects) {
169182
String projectId = ArtifactUtils.versionlessKey(project.getGroupId(), project.getArtifactId());
170183

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

173-
if (!convertToSnapshot) {
174-
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
175-
} else if (releaseDescriptor.isBranchCreation() && convertToBranch) {
176-
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
177-
} else {
178-
releaseDescriptor.addDevelopmentVersion(projectId, nextVersion);
186+
final String path = project.getFile().getPath();
187+
188+
boolean isExcludedPathFound = false;
189+
for (String exclusionPattern : exclusionPatterns) {
190+
if (FileSystems.getDefault()
191+
.getPathMatcher("glob:" + exclusionPattern)
192+
.matches(Paths.get(path))) {
193+
isExcludedPathFound = true;
194+
break;
195+
}
196+
}
197+
if (!isExcludedPathFound) {
198+
if (!convertToSnapshot) {
199+
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
200+
} else if (releaseDescriptor.isBranchCreation() && convertToBranch) {
201+
releaseDescriptor.addReleaseVersion(projectId, nextVersion);
202+
} else {
203+
releaseDescriptor.addDevelopmentVersion(projectId, nextVersion);
204+
}
179205
}
180206
}
181207
}

maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@
1919
package org.apache.maven.shared.release.phase;
2020

2121
import java.io.File;
22-
import java.net.URI;
22+
import java.nio.file.FileSystems;
23+
import java.nio.file.Paths;
2324
import java.text.DateFormat;
2425
import java.text.SimpleDateFormat;
2526
import java.util.ArrayList;
2627
import java.util.Arrays;
2728
import java.util.Collection;
2829
import java.util.Date;
30+
import java.util.HashSet;
2931
import java.util.List;
3032
import java.util.Map;
3133
import java.util.Properties;
34+
import java.util.Set;
3235
import java.util.TimeZone;
3336
import java.util.regex.Matcher;
3437
import java.util.regex.Pattern;
@@ -106,6 +109,8 @@ public abstract class AbstractRewritePomsPhase extends AbstractReleasePhase impl
106109

107110
private long startTime = -1 * 1000;
108111

112+
private final Set<String> exclusionPatterns = new HashSet<>();
113+
109114
protected AbstractRewritePomsPhase(
110115
ScmRepositoryConfigurator scmRepositoryConfigurator,
111116
Map<String, ModelETLFactory> modelETLFactories,
@@ -157,6 +162,12 @@ public ReleaseResult execute(
157162
throws ReleaseExecutionException, ReleaseFailureException {
158163
ReleaseResult result = new ReleaseResult();
159164

165+
List<String> additionalExcludes = releaseDescriptor.getCheckModificationExcludes();
166+
167+
if (additionalExcludes != null) {
168+
exclusionPatterns.addAll(additionalExcludes);
169+
}
170+
160171
transform(releaseDescriptor, releaseEnvironment, reactorProjects, false, result);
161172

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

213-
URI root = ReleaseUtil.getRootProject(reactorProjects).getBasedir().toURI();
214-
215224
for (MavenProject project : reactorProjects) {
216-
URI pom = project.getFile().toURI();
217-
logInfo(
218-
result,
219-
"Transforming " + root.relativize(pom).getPath() + ' '
220-
+ buffer().project(project.getArtifactId()) + " '" + project.getName() + "'"
221-
+ (simulate ? " with ." + getPomSuffix() + " suffix" : "") + "...");
225+
final String path = project.getFile().getPath();
226+
if (exclusionPatterns.stream().noneMatch(exclusionPattern -> FileSystems.getDefault()
227+
.getPathMatcher("glob:" + exclusionPattern)
228+
.matches(Paths.get(path)))) {
229+
logDebug(
230+
result,
231+
"Transforming " + path + ' '
232+
+ buffer().project(project.getArtifactId()) + " '" + project.getName() + "'"
233+
+ (simulate ? " with ." + getPomSuffix() + " suffix" : "") + "...");
222234

223-
transformProject(project, releaseDescriptor, releaseEnvironment, simulate, result);
235+
transformProject(project, releaseDescriptor, releaseEnvironment, simulate, result);
236+
}
224237
}
225238
}
226239

maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractScmCommitPhase.java

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@
1919
package org.apache.maven.shared.release.phase;
2020

2121
import java.io.File;
22+
import java.nio.file.FileSystems;
23+
import java.nio.file.Paths;
2224
import java.util.ArrayList;
2325
import java.util.Collection;
26+
import java.util.HashSet;
2427
import java.util.List;
28+
import java.util.Set;
2529

2630
import org.apache.maven.project.MavenProject;
2731
import org.apache.maven.scm.ScmException;
@@ -61,6 +65,8 @@ public abstract class AbstractScmCommitPhase extends AbstractReleasePhase {
6165
*/
6266
protected final String descriptorCommentGetter;
6367

68+
private final Set<String> exclusionPatterns = new HashSet<>();
69+
6470
protected AbstractScmCommitPhase(
6571
ScmRepositoryConfigurator scmRepositoryConfigurator, String descriptorCommentGetter) {
6672
this.scmRepositoryConfigurator = requireNonNull(scmRepositoryConfigurator);
@@ -77,6 +83,12 @@ public ReleaseResult execute(
7783

7884
validateConfiguration(releaseDescriptor);
7985

86+
List<String> additionalExcludes = releaseDescriptor.getCheckModificationExcludes();
87+
88+
if (additionalExcludes != null) {
89+
exclusionPatterns.addAll(additionalExcludes);
90+
}
91+
8092
runLogic(releaseDescriptor, releaseEnvironment, reactorProjects, relResult, false);
8193

8294
relResult.setResultCode(ReleaseResult.SUCCESS);
@@ -166,9 +178,12 @@ protected void performCheckins(
166178
}
167179
} else {
168180
List<File> pomFiles = createPomFiles(releaseDescriptor, reactorProjects);
169-
ScmFileSet fileSet = new ScmFileSet(new File(releaseDescriptor.getWorkingDirectory()), pomFiles);
170181

171-
checkin(provider, repository, fileSet, releaseDescriptor, message);
182+
if (!pomFiles.isEmpty()) {
183+
ScmFileSet fileSet = new ScmFileSet(new File(releaseDescriptor.getWorkingDirectory()), pomFiles);
184+
185+
checkin(provider, repository, fileSet, releaseDescriptor, message);
186+
}
172187
}
173188
}
174189

@@ -288,11 +303,25 @@ protected static List<File> createPomFiles(ReleaseDescriptor releaseDescriptor,
288303
* @param reactorProjects a {@link java.util.List} object
289304
* @return a {@link java.util.List} object
290305
*/
291-
protected static List<File> createPomFiles(
292-
ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects) {
306+
protected List<File> createPomFiles(ReleaseDescriptor releaseDescriptor, List<MavenProject> reactorProjects) {
307+
293308
List<File> pomFiles = new ArrayList<>();
294309
for (MavenProject project : reactorProjects) {
295-
pomFiles.addAll(createPomFiles(releaseDescriptor, project));
310+
311+
final String path = project.getFile().getPath();
312+
313+
boolean isExcludedPathFound = false;
314+
for (String exclusionPattern : exclusionPatterns) {
315+
if (FileSystems.getDefault()
316+
.getPathMatcher("glob:" + exclusionPattern)
317+
.matches(Paths.get(path))) {
318+
isExcludedPathFound = true;
319+
break;
320+
}
321+
}
322+
if (!isExcludedPathFound) {
323+
pomFiles.addAll(createPomFiles(releaseDescriptor, project));
324+
}
296325
}
297326
return pomFiles;
298327
}

maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapDevelopmentVersionPhaseIT.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.apache.maven.shared.release.phase;
2020

21+
import java.io.File;
2122
import java.util.Collections;
2223
import java.util.List;
2324

@@ -46,7 +47,10 @@ private static MavenProject createProject(String artifactId, String version) {
4647
model.setGroupId("groupId");
4748
model.setArtifactId(artifactId);
4849
model.setVersion(version);
49-
return new MavenProject(model);
50+
51+
MavenProject mavenProject = new MavenProject(model);
52+
mavenProject.setFile(new File("src/test/resources/pomfinder/pom1.xml"));
53+
return mavenProject;
5054
}
5155

5256
@Test

maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/MapVersionsPhaseTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.apache.maven.shared.release.phase;
2020

21+
import java.io.File;
2122
import java.util.ArrayList;
2223
import java.util.Arrays;
2324
import java.util.Collections;
@@ -2452,6 +2453,9 @@ private static MavenProject createProject(String artifactId, String version) {
24522453
model.setGroupId("groupId");
24532454
model.setArtifactId(artifactId);
24542455
model.setVersion(version);
2455-
return new MavenProject(model);
2456+
2457+
MavenProject mavenProject = new MavenProject(model);
2458+
mavenProject.setFile(new File("src/test/resources/pomfinder/pom1.xml"));
2459+
return mavenProject;
24562460
}
24572461
}

0 commit comments

Comments
 (0)