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.edit.EditScmResult;
26 import org.apache.maven.scm.manager.NoSuchScmProviderException;
27 import org.apache.maven.scm.provider.ScmProvider;
28 import org.apache.maven.scm.repository.ScmRepository;
29 import org.apache.maven.scm.repository.ScmRepositoryException;
30 import org.apache.maven.shared.release.ReleaseExecutionException;
31 import org.apache.maven.shared.release.ReleaseFailureException;
32 import org.apache.maven.shared.release.ReleaseResult;
33 import org.apache.maven.shared.release.config.ReleaseDescriptor;
34 import org.apache.maven.shared.release.env.ReleaseEnvironment;
35 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
36 import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
37 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
38 import org.apache.maven.shared.release.util.ReleaseUtil;
39 import org.codehaus.plexus.component.annotations.Component;
40 import org.codehaus.plexus.component.annotations.Requirement;
41 import org.codehaus.plexus.util.FileUtils;
42
43 import java.io.File;
44 import java.io.IOException;
45 import java.util.List;
46
47
48
49
50 @Component( role = ReleasePhase.class, hint = "restore-backup-poms" )
51 public class RestoreBackupPomsPhase
52 extends AbstractBackupPomsPhase
53 {
54
55
56
57 @Requirement
58 private ScmRepositoryConfigurator scmRepositoryConfigurator;
59
60 @Override
61 public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
62 List<MavenProject> reactorProjects )
63 throws ReleaseExecutionException, ReleaseFailureException
64 {
65 ReleaseResult result = new ReleaseResult();
66
67 for ( MavenProject project : reactorProjects )
68 {
69 restorePomBackup( releaseDescriptor, releaseEnvironment, project );
70 }
71
72 result.setResultCode( ReleaseResult.SUCCESS );
73
74 return result;
75 }
76
77 @Override
78 public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
79 List<MavenProject> reactorProjects )
80 throws ReleaseExecutionException, ReleaseFailureException
81 {
82 return execute( releaseDescriptor, releaseEnvironment, reactorProjects );
83 }
84
85 protected void restorePomBackup( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment,
86 MavenProject project )
87 throws ReleaseExecutionException, ReleaseFailureException
88 {
89 File pomBackup = getPomBackup( project );
90
91 if ( !pomBackup.exists() )
92 {
93 throw new ReleaseExecutionException(
94 "Cannot restore from a missing backup POM: " + pomBackup.getAbsolutePath() );
95 }
96
97 try
98 {
99 ScmRepository scmRepository;
100 ScmProvider provider;
101 try
102 {
103 scmRepository =
104 scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor,
105 releaseEnvironment.getSettings() );
106
107 provider = scmRepositoryConfigurator.getRepositoryProvider( scmRepository );
108 }
109 catch ( ScmRepositoryException e )
110 {
111 throw new ReleaseScmRepositoryException( e.getMessage(), e.getValidationMessages() );
112 }
113 catch ( NoSuchScmProviderException e )
114 {
115 throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
116 }
117
118 if ( releaseDescriptor.isScmUseEditMode() || provider.requiresEditMode() )
119 {
120 EditScmResult result = provider.edit( scmRepository, new ScmFileSet(
121 new File( releaseDescriptor.getWorkingDirectory() ), project.getFile() ) );
122
123 if ( !result.isSuccess() )
124 {
125 throw new ReleaseScmCommandException( "Unable to enable editing on the POM", result );
126 }
127 }
128 }
129 catch ( ScmException e )
130 {
131 throw new ReleaseExecutionException( "An error occurred enabling edit mode: " + e.getMessage(), e );
132 }
133
134 try
135 {
136 FileUtils.copyFile( getPomBackup( project ), ReleaseUtil.getStandardPom( project ) );
137 }
138 catch ( IOException e )
139 {
140 throw new ReleaseExecutionException( "Error restoring from backup POM: " + e.getMessage(), e );
141 }
142 }
143 }