1 package org.apache.maven.continuum.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.scm.ScmException;
23 import org.apache.maven.scm.ScmFileSet;
24 import org.apache.maven.scm.ScmVersion;
25 import org.apache.maven.scm.command.update.UpdateScmResult;
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.settings.Settings;
31 import org.apache.maven.shared.release.ReleaseExecutionException;
32 import org.apache.maven.shared.release.ReleaseFailureException;
33 import org.apache.maven.shared.release.ReleaseResult;
34 import org.apache.maven.shared.release.config.ReleaseDescriptor;
35 import org.apache.maven.shared.release.phase.AbstractReleasePhase;
36 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
37 import org.apache.maven.shared.release.scm.ReleaseScmRepositoryException;
38 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
39
40 import java.io.File;
41 import java.util.List;
42
43
44
45
46
47
48
49 public class UpdateWorkingCopyPhase
50 extends AbstractReleasePhase
51 {
52
53
54
55 private ScmRepositoryConfigurator scmRepositoryConfigurator;
56
57 private boolean copyUpdated = false;
58
59 public ReleaseResult execute( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
60 throws ReleaseExecutionException, ReleaseFailureException
61 {
62 ReleaseResult relResult = new ReleaseResult();
63
64 logInfo( relResult, "Updating local copy against the scm..." );
65
66 ScmRepository repository;
67 ScmProvider provider;
68 try
69 {
70 repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, settings );
71
72 provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
73 }
74 catch ( ScmRepositoryException e )
75 {
76 throw new ReleaseScmRepositoryException(
77 e.getMessage() + " for URL: " + releaseDescriptor.getScmSourceUrl(), e.getValidationMessages() );
78 }
79 catch ( NoSuchScmProviderException e )
80 {
81 throw new ReleaseExecutionException( "Unable to configure SCM repository: " + e.getMessage(), e );
82 }
83
84 UpdateScmResult result;
85 try
86 {
87 result = provider.update( repository, new ScmFileSet( new File( releaseDescriptor.getWorkingDirectory() ) ),
88 (ScmVersion) null );
89 }
90 catch ( ScmException e )
91 {
92 throw new ReleaseExecutionException( "An error occurred while updating your local copy: " + e.getMessage(),
93 e );
94 }
95
96 if ( !result.isSuccess() )
97 {
98 throw new ReleaseScmCommandException( "Unable to update current working copy", result );
99 }
100
101 copyUpdated = ( result.getUpdatedFiles().size() > 0 );
102
103 relResult.setResultCode( ReleaseResult.SUCCESS );
104
105 return relResult;
106 }
107
108 public ReleaseResult simulate( ReleaseDescriptor releaseDescriptor, Settings settings, List reactorProjects )
109 throws ReleaseExecutionException, ReleaseFailureException
110 {
111 return execute( releaseDescriptor, settings, reactorProjects );
112 }
113
114 public boolean isCopyUpdated()
115 {
116 return copyUpdated;
117 }
118
119 public void setCopyUpdated( boolean copyUpdated )
120 {
121 this.copyUpdated = copyUpdated;
122 }
123 }