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