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