1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.release.phase;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.io.File;
26 import java.util.ArrayList;
27 import java.util.List;
28
29 import org.apache.maven.project.MavenProject;
30 import org.apache.maven.scm.ScmException;
31 import org.apache.maven.scm.ScmFileSet;
32 import org.apache.maven.scm.command.remove.RemoveScmResult;
33 import org.apache.maven.scm.provider.ScmProvider;
34 import org.apache.maven.scm.repository.ScmRepository;
35 import org.apache.maven.shared.release.ReleaseExecutionException;
36 import org.apache.maven.shared.release.ReleaseFailureException;
37 import org.apache.maven.shared.release.ReleaseResult;
38 import org.apache.maven.shared.release.config.ReleaseDescriptor;
39 import org.apache.maven.shared.release.env.ReleaseEnvironment;
40 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
41 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
42 import org.apache.maven.shared.release.util.ReleaseUtil;
43
44
45
46
47
48
49
50 @Singleton
51 @Named("remove-release-poms")
52 public class RemoveReleasePomsPhase extends AbstractReleasePomsPhase {
53 @Inject
54 public RemoveReleasePomsPhase(ScmRepositoryConfigurator scmRepositoryConfigurator) {
55 super(scmRepositoryConfigurator);
56 }
57
58 @Override
59 public ReleaseResult execute(
60 ReleaseDescriptor releaseDescriptor,
61 ReleaseEnvironment releaseEnvironment,
62 List<MavenProject> reactorProjects)
63 throws ReleaseFailureException, ReleaseExecutionException {
64 return execute(releaseDescriptor, releaseEnvironment, reactorProjects, false);
65 }
66
67 @Override
68 public ReleaseResult simulate(
69 ReleaseDescriptor releaseDescriptor,
70 ReleaseEnvironment releaseEnvironment,
71 List<MavenProject> reactorProjects)
72 throws ReleaseFailureException, ReleaseExecutionException {
73 return execute(releaseDescriptor, releaseEnvironment, reactorProjects, true);
74 }
75
76 private ReleaseResult execute(
77 ReleaseDescriptor releaseDescriptor,
78 ReleaseEnvironment releaseEnvironment,
79 List<MavenProject> reactorProjects,
80 boolean simulate)
81 throws ReleaseFailureException, ReleaseExecutionException {
82 ReleaseResult result = new ReleaseResult();
83
84 if (releaseDescriptor.isGenerateReleasePoms()) {
85 removeReleasePoms(releaseDescriptor, releaseEnvironment, simulate, result, reactorProjects);
86 } else {
87 logInfo(result, "Not removing release POMs");
88 }
89
90 result.setResultCode(ReleaseResult.SUCCESS);
91
92 return result;
93 }
94
95 private void removeReleasePoms(
96 ReleaseDescriptor releaseDescriptor,
97 ReleaseEnvironment releaseEnvironment,
98 boolean simulate,
99 ReleaseResult result,
100 List<MavenProject> projects)
101 throws ReleaseFailureException, ReleaseExecutionException {
102 List<File> releasePoms = new ArrayList<>();
103
104 for (MavenProject project : projects) {
105 logInfo(result, "Removing release POM for '" + project.getName() + "'...");
106
107 releasePoms.add(ReleaseUtil.getReleasePom(project));
108 }
109
110 if (releaseDescriptor.isSuppressCommitBeforeTagOrBranch()) {
111 removeReleasePomsFromFilesystem(simulate, result, releasePoms);
112 } else {
113 removeReleasePomsFromScm(releaseDescriptor, releaseEnvironment, simulate, result, releasePoms);
114 }
115 }
116
117 private void removeReleasePomsFromFilesystem(boolean simulate, ReleaseResult result, List<File> releasePoms) {
118 if (simulate) {
119 logInfo(result, "Full run would be removing " + releasePoms);
120 } else {
121 for (File releasePom : releasePoms) {
122 releasePom.delete();
123 }
124 }
125 }
126
127 private void removeReleasePomsFromScm(
128 ReleaseDescriptor releaseDescriptor,
129 ReleaseEnvironment releaseEnvironment,
130 boolean simulate,
131 ReleaseResult result,
132 List<File> releasePoms)
133 throws ReleaseFailureException, ReleaseExecutionException {
134 if (simulate) {
135 logInfo(result, "Full run would be removing " + releasePoms);
136 } else {
137 ScmRepository scmRepository = getScmRepository(releaseDescriptor, releaseEnvironment);
138 ScmProvider scmProvider = getScmProvider(scmRepository);
139
140 ScmFileSet scmFileSet = new ScmFileSet(new File(releaseDescriptor.getWorkingDirectory()), releasePoms);
141
142 try {
143 RemoveScmResult scmResult =
144 scmProvider.remove(scmRepository, scmFileSet, "Removing for next development iteration.");
145
146 if (!scmResult.isSuccess()) {
147 throw new ReleaseScmCommandException("Cannot remove release POMs from SCM", scmResult);
148 }
149 } catch (ScmException exception) {
150 throw new ReleaseExecutionException(
151 "Cannot remove release POMs from SCM: " + exception.getMessage(), exception);
152 }
153 }
154 }
155 }