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
40
41
42
43
44
45
46
47 public class RemoveReleasePomsPhase
48 extends AbstractReleasePomsPhase
49 {
50 public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
51 List<MavenProject> reactorProjects )
52 throws ReleaseFailureException, ReleaseExecutionException
53 {
54 return execute( releaseDescriptor, releaseEnvironment, reactorProjects, false );
55 }
56
57 public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
58 List<MavenProject> reactorProjects )
59 throws ReleaseFailureException, ReleaseExecutionException
60 {
61 return execute( releaseDescriptor, releaseEnvironment, reactorProjects, true );
62 }
63
64 private ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
65 List<MavenProject> reactorProjects, boolean simulate )
66 throws ReleaseFailureException, ReleaseExecutionException
67 {
68 ReleaseResult result = new ReleaseResult();
69
70 if ( releaseDescriptor.isGenerateReleasePoms() )
71 {
72 removeReleasePoms( releaseDescriptor, releaseEnvironment, simulate, result, reactorProjects );
73 }
74 else
75 {
76 logInfo( result, "Not removing release POMs" );
77 }
78
79 result.setResultCode( ReleaseResult.SUCCESS );
80
81 return result;
82 }
83
84 private void removeReleasePoms( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
85 boolean simulate, ReleaseResult result, List<MavenProject> projects )
86 throws ReleaseFailureException, ReleaseExecutionException
87 {
88 List<File> releasePoms = new ArrayList<File>();
89
90 for ( MavenProject project : projects )
91 {
92 logInfo( result, "Removing release POM for '" + project.getName() + "'..." );
93
94 releasePoms.add( ReleaseUtil.getReleasePom( project ) );
95 }
96
97 if ( releaseDescriptor.isSuppressCommitBeforeTagOrBranch() )
98 {
99 removeReleasePomsFromFilesystem( simulate, result, releasePoms );
100 }
101 else
102 {
103 removeReleasePomsFromScm( releaseDescriptor, releaseEnvironment, simulate, result, releasePoms );
104 }
105 }
106
107 private void removeReleasePomsFromFilesystem( boolean simulate, ReleaseResult result, List<File> releasePoms )
108 {
109 if ( simulate )
110 {
111 logInfo( result, "Full run would be removing " + releasePoms );
112 }
113 else
114 {
115 for ( File releasePom : releasePoms )
116 {
117 releasePom.delete();
118 }
119 }
120 }
121
122 private void removeReleasePomsFromScm( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
123 boolean simulate, ReleaseResult result, List<File> releasePoms )
124 throws ReleaseFailureException, ReleaseExecutionException
125 {
126 if ( simulate )
127 {
128 logInfo( result, "Full run would be removing " + releasePoms );
129 }
130 else
131 {
132 ScmRepository scmRepository = getScmRepository( releaseDescriptor, releaseEnvironment );
133 ScmProvider scmProvider = getScmProvider( scmRepository );
134
135 ScmFileSet scmFileSet = new ScmFileSet( new File( releaseDescriptor.getWorkingDirectory() ), releasePoms );
136
137 try
138 {
139 RemoveScmResult scmResult =
140 scmProvider.remove( scmRepository, scmFileSet, "Removing for next development iteration." );
141
142 if ( !scmResult.isSuccess() )
143 {
144 throw new ReleaseScmCommandException( "Cannot remove release POMs from SCM", scmResult );
145 }
146 }
147 catch ( ScmException exception )
148 {
149 throw new ReleaseExecutionException( "Cannot remove release POMs from SCM: " + exception.getMessage(),
150 exception );
151 }
152 }
153 }
154 }