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 org.apache.maven.project.MavenProject;
23 import org.apache.maven.scm.ScmException;
24 import org.apache.maven.scm.ScmFileSet;
25 import org.apache.maven.scm.command.remove.RemoveScmResult;
26 import org.apache.maven.scm.provider.ScmProvider;
27 import org.apache.maven.scm.repository.ScmRepository;
28 import org.apache.maven.shared.release.ReleaseExecutionException;
29 import org.apache.maven.shared.release.ReleaseFailureException;
30 import org.apache.maven.shared.release.ReleaseResult;
31 import org.apache.maven.shared.release.config.ReleaseDescriptor;
32 import org.apache.maven.shared.release.env.ReleaseEnvironment;
33 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
34 import org.apache.maven.shared.release.util.ReleaseUtil;
35
36 import java.io.File;
37 import java.util.ArrayList;
38 import java.util.List;
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 logInfo( result, "Removing release POMs..." );
73
74 removeReleasePoms( releaseDescriptor, releaseEnvironment, simulate, result, reactorProjects );
75 }
76 else
77 {
78 logInfo( result, "Not removing release POMs" );
79 }
80
81 result.setResultCode( ReleaseResult.SUCCESS );
82
83 return result;
84 }
85
86 private void removeReleasePoms( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
87 boolean simulate, ReleaseResult result, List<MavenProject> projects )
88 throws ReleaseFailureException, ReleaseExecutionException
89 {
90 List<File> releasePoms = new ArrayList<File>();
91
92 for ( MavenProject project : projects )
93 {
94 logInfo( result, "Removing release POM for '" + project.getName() + "'..." );
95
96 releasePoms.add( ReleaseUtil.getReleasePom( project ) );
97 }
98
99 removeReleasePomsFromScm( releaseDescriptor, releaseEnvironment, simulate, result, releasePoms );
100 }
101
102 private void removeReleasePomsFromScm( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
103 boolean simulate, ReleaseResult result, List<File> releasePoms )
104 throws ReleaseFailureException, ReleaseExecutionException
105 {
106 if ( simulate )
107 {
108 logInfo( result, "Full run would be removing " + releasePoms );
109 }
110 else
111 {
112 ScmRepository scmRepository = getScmRepository( releaseDescriptor, releaseEnvironment );
113 ScmProvider scmProvider = getScmProvider( scmRepository );
114
115 ScmFileSet scmFileSet = new ScmFileSet( new File( releaseDescriptor.getWorkingDirectory() ), releasePoms );
116
117 try
118 {
119 RemoveScmResult scmResult =
120 scmProvider.remove( scmRepository, scmFileSet, "Removing for next development iteration." );
121
122 if ( !scmResult.isSuccess() )
123 {
124 throw new ReleaseScmCommandException( "Cannot remove release POMs from SCM", scmResult );
125 }
126 }
127 catch ( ScmException exception )
128 {
129 throw new ReleaseExecutionException( "Cannot remove release POMs from SCM: " + exception.getMessage(),
130 exception );
131 }
132 }
133 }
134 }