| package org.apache.maven.shared.release; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import org.apache.commons.lang3.BooleanUtils; |
| import org.apache.maven.project.MavenProject; |
| import org.apache.maven.settings.Settings; |
| import org.apache.maven.shared.release.config.ReleaseDescriptor; |
| import org.apache.maven.shared.release.config.ReleaseDescriptorStore; |
| import org.apache.maven.shared.release.config.ReleaseDescriptorStoreException; |
| import org.apache.maven.shared.release.env.DefaultReleaseEnvironment; |
| import org.apache.maven.shared.release.env.ReleaseEnvironment; |
| import org.apache.maven.shared.release.phase.ReleasePhase; |
| import org.codehaus.plexus.logging.AbstractLogEnabled; |
| import org.codehaus.plexus.util.StringUtils; |
| |
| /** |
| * Implementation of the release manager. |
| * |
| * @author <a href="mailto:brett@apache.org">Brett Porter</a> |
| */ |
| public class DefaultReleaseManager |
| extends AbstractLogEnabled |
| implements ReleaseManager |
| { |
| /** |
| * The phases of release to run, and in what order. |
| */ |
| private List<String> preparePhases; |
| |
| /** |
| * The phases of release to run to perform. |
| */ |
| private List<String> performPhases; |
| |
| /** |
| * The phases of release to run to rollback changes |
| */ |
| private List<String> rollbackPhases; |
| |
| /** |
| * The phases to create a branch. |
| */ |
| private List<String> branchPhases; |
| |
| /** |
| * The phases to create update versions. |
| */ |
| private List<String> updateVersionsPhases; |
| |
| /** |
| * The available phases. |
| */ |
| private Map<String, ReleasePhase> releasePhases; |
| |
| /** |
| * The configuration storage. |
| */ |
| private ReleaseDescriptorStore configStore; |
| |
| private static final int PHASE_SKIP = 0, PHASE_START = 1, PHASE_END = 2, GOAL_START = 11, GOAL_END = 12, ERROR = 99; |
| |
| @Override |
| public void prepare( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( releaseDescriptor, releaseEnvironment, reactorProjects, true, false, null ); |
| } |
| |
| @Override |
| public void prepare( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean resume, boolean dryRun ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( releaseDescriptor, releaseEnvironment, reactorProjects, resume, dryRun, null ); |
| } |
| |
| @Override |
| public ReleaseResult prepareWithResult( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean resume, boolean dryRun, |
| ReleaseManagerListener listener ) |
| { |
| ReleaseResult result = new ReleaseResult(); |
| |
| result.setStartTime( System.currentTimeMillis() ); |
| |
| try |
| { |
| prepare( releaseDescriptor, releaseEnvironment, reactorProjects, resume, dryRun, listener, result ); |
| |
| result.setResultCode( ReleaseResult.SUCCESS ); |
| } |
| catch ( ReleaseExecutionException e ) |
| { |
| captureException( result, listener, e ); |
| } |
| catch ( ReleaseFailureException e ) |
| { |
| captureException( result, listener, e ); |
| } |
| finally |
| { |
| result.setEndTime( System.currentTimeMillis() ); |
| } |
| |
| return result; |
| } |
| |
| @Override |
| public void prepare( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean resume, boolean dryRun, |
| ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( releaseDescriptor, releaseEnvironment, reactorProjects, resume, dryRun, listener, null ); |
| } |
| |
| @Override |
| public void prepare( ReleasePrepareRequest prepareRequest ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( prepareRequest, new ReleaseResult() ); |
| } |
| |
| private void prepare( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean resume, boolean dryRun, |
| ReleaseManagerListener listener, ReleaseResult result ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| ReleasePrepareRequest prepareRequest = new ReleasePrepareRequest(); |
| prepareRequest.setReleaseDescriptor( releaseDescriptor ); |
| prepareRequest.setReleaseEnvironment( releaseEnvironment ); |
| prepareRequest.setReactorProjects( reactorProjects ); |
| prepareRequest.setResume( resume ); |
| prepareRequest.setDryRun( dryRun ); |
| prepareRequest.setReleaseManagerListener( listener ); |
| |
| prepare( prepareRequest, result ); |
| } |
| |
| private void prepare( ReleasePrepareRequest prepareRequest, ReleaseResult result ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| updateListener( prepareRequest.getReleaseManagerListener(), "prepare", GOAL_START ); |
| |
| ReleaseDescriptor config; |
| if ( BooleanUtils.isNotFalse( prepareRequest.getResume() ) ) |
| { |
| config = loadReleaseDescriptor( prepareRequest.getReleaseDescriptor(), |
| prepareRequest.getReleaseManagerListener() ); |
| } |
| else |
| { |
| config = prepareRequest.getReleaseDescriptor(); |
| } |
| |
| // Later, it would be a good idea to introduce a proper workflow tool so that the release can be made up of a |
| // more flexible set of steps. |
| |
| String completedPhase = config.getCompletedPhase(); |
| int index = preparePhases.indexOf( completedPhase ); |
| |
| for ( int idx = 0; idx <= index; idx++ ) |
| { |
| updateListener( prepareRequest.getReleaseManagerListener(), preparePhases.get( idx ), PHASE_SKIP ); |
| } |
| |
| if ( index == preparePhases.size() - 1 ) |
| { |
| logInfo( result, "Release preparation already completed. You can now continue with release:perform, " |
| + "or start again using the -Dresume=false flag" ); |
| } |
| else if ( index >= 0 ) |
| { |
| logInfo( result, "Resuming release from phase '" + preparePhases.get( index + 1 ) + "'" ); |
| } |
| |
| // start from next phase |
| for ( int i = index + 1; i < preparePhases.size(); i++ ) |
| { |
| String name = preparePhases.get( i ); |
| |
| ReleasePhase phase = releasePhases.get( name ); |
| |
| if ( phase == null ) |
| { |
| throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" ); |
| } |
| |
| updateListener( prepareRequest.getReleaseManagerListener(), name, PHASE_START ); |
| |
| ReleaseResult phaseResult = null; |
| try |
| { |
| if ( BooleanUtils.isTrue( prepareRequest.getDryRun() ) ) |
| { |
| phaseResult = phase.simulate( config, |
| prepareRequest.getReleaseEnvironment(), |
| prepareRequest.getReactorProjects() ); |
| } |
| else |
| { |
| phaseResult = phase.execute( config, |
| prepareRequest.getReleaseEnvironment(), |
| prepareRequest.getReactorProjects() ); |
| } |
| } |
| finally |
| { |
| if ( result != null && phaseResult != null ) |
| { |
| result.appendOutput( phaseResult.getOutput() ); |
| } |
| } |
| |
| config.setCompletedPhase( name ); |
| try |
| { |
| configStore.write( config ); |
| } |
| catch ( ReleaseDescriptorStoreException e ) |
| { |
| // TODO: rollback? |
| throw new ReleaseExecutionException( "Error writing release properties after completing phase", e ); |
| } |
| |
| updateListener( prepareRequest.getReleaseManagerListener(), name, PHASE_END ); |
| } |
| |
| updateListener( prepareRequest.getReleaseManagerListener(), "prepare", GOAL_END ); |
| } |
| |
| @Override |
| public void rollback( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| rollback( releaseDescriptor, releaseEnvironment, reactorProjects, null ); |
| } |
| |
| @Override |
| public void rollback( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| ReleaseRollbackRequest rollbackRequest = new ReleaseRollbackRequest(); |
| rollbackRequest.setReleaseDescriptor( releaseDescriptor ); |
| rollbackRequest.setReleaseEnvironment( releaseEnvironment ); |
| rollbackRequest.setReactorProjects( reactorProjects ); |
| rollbackRequest.setReleaseManagerListener( listener ); |
| |
| rollback( rollbackRequest ); |
| } |
| |
| @Override |
| public void rollback( ReleaseRollbackRequest rollbackRequest ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| updateListener( rollbackRequest.getReleaseManagerListener(), "rollback", GOAL_START ); |
| |
| ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( rollbackRequest.getReleaseDescriptor(), null ); |
| |
| for ( String name : rollbackPhases ) |
| { |
| ReleasePhase phase = releasePhases.get( name ); |
| |
| if ( phase == null ) |
| { |
| throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" ); |
| } |
| |
| updateListener( rollbackRequest.getReleaseManagerListener(), name, PHASE_START ); |
| phase.execute( releaseDescriptor, |
| rollbackRequest.getReleaseEnvironment(), |
| rollbackRequest.getReactorProjects() ); |
| updateListener( rollbackRequest.getReleaseManagerListener(), name, PHASE_END ); |
| } |
| |
| //call release:clean so that resume will not be possible anymore after a rollback |
| clean( releaseDescriptor, |
| rollbackRequest.getReleaseManagerListener(), |
| rollbackRequest.getReactorProjects() ); |
| updateListener( rollbackRequest.getReleaseManagerListener(), "rollback", GOAL_END ); |
| } |
| |
| @Override |
| public void perform( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, releaseEnvironment, reactorProjects, null, true ); |
| } |
| |
| @Override |
| public void perform( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean clean ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, releaseEnvironment, reactorProjects, null, clean ); |
| } |
| |
| @Override |
| public void perform( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, releaseEnvironment, reactorProjects, listener, true ); |
| } |
| |
| public void perform( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, ReleaseManagerListener listener, boolean clean ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, releaseEnvironment, reactorProjects, listener, new ReleaseResult(), clean ); |
| } |
| |
| @Override |
| public ReleaseResult performWithResult( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, ReleaseManagerListener listener ) |
| { |
| ReleaseResult result = new ReleaseResult(); |
| |
| try |
| { |
| result.setStartTime( System.currentTimeMillis() ); |
| |
| perform( releaseDescriptor, releaseEnvironment, reactorProjects, listener, result, true ); |
| |
| result.setResultCode( ReleaseResult.SUCCESS ); |
| } |
| catch ( ReleaseExecutionException e ) |
| { |
| captureException( result, listener, e ); |
| } |
| catch ( ReleaseFailureException e ) |
| { |
| captureException( result, listener, e ); |
| } |
| finally |
| { |
| result.setEndTime( System.currentTimeMillis() ); |
| } |
| |
| return result; |
| } |
| |
| @Override |
| public void perform( ReleasePerformRequest performRequest ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( performRequest, new ReleaseResult() ); |
| } |
| |
| private void perform( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, ReleaseManagerListener listener, ReleaseResult result, |
| boolean clean ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| ReleasePerformRequest performRequest = new ReleasePerformRequest(); |
| performRequest.setReleaseDescriptor( releaseDescriptor ); |
| performRequest.setReleaseEnvironment( releaseEnvironment ); |
| performRequest.setReactorProjects( reactorProjects ); |
| performRequest.setReleaseManagerListener( listener ); |
| performRequest.setClean( clean ); |
| |
| perform( performRequest, result ); |
| } |
| |
| private void perform( ReleasePerformRequest performRequest, ReleaseResult result ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| updateListener( performRequest.getReleaseManagerListener(), "perform", GOAL_START ); |
| |
| ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( performRequest.getReleaseDescriptor(), |
| performRequest.getReleaseManagerListener() ); |
| |
| for ( String name : performPhases ) |
| { |
| ReleasePhase phase = releasePhases.get( name ); |
| |
| if ( phase == null ) |
| { |
| throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" ); |
| } |
| |
| updateListener( performRequest.getReleaseManagerListener(), name, PHASE_START ); |
| |
| ReleaseResult phaseResult = null; |
| try |
| { |
| if ( BooleanUtils.isTrue( performRequest.getDryRun() ) ) |
| { |
| phaseResult = phase.simulate( releaseDescriptor, |
| performRequest.getReleaseEnvironment(), |
| performRequest.getReactorProjects() ); |
| } |
| else |
| { |
| phaseResult = phase.execute( releaseDescriptor, |
| performRequest.getReleaseEnvironment(), |
| performRequest.getReactorProjects() ); |
| } |
| } |
| finally |
| { |
| if ( result != null && phaseResult != null ) |
| { |
| result.appendOutput( phaseResult.getOutput() ); |
| } |
| } |
| |
| updateListener( performRequest.getReleaseManagerListener(), name, PHASE_END ); |
| } |
| |
| if ( BooleanUtils.isNotFalse( performRequest.getClean() ) ) |
| { |
| // call release:clean so that resume will not be possible anymore after a perform |
| clean( releaseDescriptor, performRequest.getReleaseManagerListener(), performRequest.getReactorProjects() ); |
| } |
| |
| updateListener( performRequest.getReleaseManagerListener(), "perform", GOAL_END ); |
| } |
| |
| @Override |
| public void branch( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean dryRun ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| branch( releaseDescriptor, releaseEnvironment, reactorProjects, dryRun, null ); |
| } |
| |
| @Override |
| public void branch( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects, boolean dryRun, ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| ReleaseBranchRequest branchRequest = new ReleaseBranchRequest(); |
| branchRequest.setReleaseDescriptor( releaseDescriptor ); |
| branchRequest.setReleaseEnvironment( releaseEnvironment ); |
| branchRequest.setReactorProjects( reactorProjects ); |
| branchRequest.setDryRun( dryRun ); |
| branchRequest.setReleaseManagerListener( listener ); |
| |
| branch( branchRequest ); |
| } |
| |
| @Override |
| public void branch( ReleaseBranchRequest branchRequest ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( branchRequest.getReleaseDescriptor(), |
| branchRequest.getReleaseManagerListener() ); |
| |
| updateListener( branchRequest.getReleaseManagerListener(), "branch", GOAL_START ); |
| |
| boolean dryRun = BooleanUtils.isTrue( branchRequest.getDryRun() ); |
| |
| for ( String name : branchPhases ) |
| { |
| ReleasePhase phase = releasePhases.get( name ); |
| |
| if ( phase == null ) |
| { |
| throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" ); |
| } |
| |
| updateListener( branchRequest.getReleaseManagerListener(), name, PHASE_START ); |
| |
| if ( dryRun ) |
| { |
| phase.simulate( releaseDescriptor, |
| branchRequest.getReleaseEnvironment(), |
| branchRequest.getReactorProjects() ); |
| } |
| else // getDryRun is null or FALSE |
| { |
| phase.execute( releaseDescriptor, |
| branchRequest.getReleaseEnvironment(), |
| branchRequest.getReactorProjects() ); |
| } |
| updateListener( branchRequest.getReleaseManagerListener(), name, PHASE_END ); |
| } |
| |
| if ( !dryRun ) |
| { |
| clean( releaseDescriptor, |
| branchRequest.getReleaseManagerListener(), |
| branchRequest.getReactorProjects() ); |
| } |
| |
| updateListener( branchRequest.getReleaseManagerListener(), "branch", GOAL_END ); |
| } |
| |
| @Override |
| public void updateVersions( ReleaseDescriptor releaseDescriptor, ReleaseEnvironment releaseEnvironment, |
| List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| ReleaseUpdateVersionsRequest updateVersionsRequest = new ReleaseUpdateVersionsRequest(); |
| updateVersionsRequest.setReleaseDescriptor( releaseDescriptor ); |
| updateVersionsRequest.setReleaseEnvironment( releaseEnvironment ); |
| updateVersionsRequest.setReactorProjects( reactorProjects ); |
| |
| updateVersions( updateVersionsRequest ); |
| } |
| |
| @Override |
| public void updateVersions( ReleaseUpdateVersionsRequest updateVersionsRequest ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| updateListener( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", GOAL_START ); |
| |
| ReleaseDescriptor releaseDescriptor = loadReleaseDescriptor( updateVersionsRequest.getReleaseDescriptor(), |
| updateVersionsRequest.getReleaseManagerListener() ); |
| |
| for ( String name : updateVersionsPhases ) |
| { |
| ReleasePhase phase = releasePhases.get( name ); |
| |
| if ( phase == null ) |
| { |
| throw new ReleaseExecutionException( "Unable to find phase '" + name + "' to execute" ); |
| } |
| |
| updateListener( updateVersionsRequest.getReleaseManagerListener(), name, PHASE_START ); |
| phase.execute( releaseDescriptor, |
| updateVersionsRequest.getReleaseEnvironment(), |
| updateVersionsRequest.getReactorProjects() ); |
| updateListener( updateVersionsRequest.getReleaseManagerListener(), name, PHASE_END ); |
| } |
| |
| clean( releaseDescriptor, |
| updateVersionsRequest.getReleaseManagerListener(), |
| updateVersionsRequest.getReactorProjects() ); |
| |
| updateListener( updateVersionsRequest.getReleaseManagerListener(), "updateVersions", GOAL_END ); |
| } |
| |
| /** |
| * Determines the path of the working directory. By default, this is the |
| * checkout directory. For some SCMs, the project root directory is not the |
| * checkout directory itself, but a SCM-specific subdirectory. |
| * |
| * @param checkoutDirectory The checkout directory as java.io.File |
| * @param relativePathProjectDirectory The relative path of the project directory within the checkout |
| * directory or "" |
| * @return The working directory |
| */ |
| protected File determineWorkingDirectory( File checkoutDirectory, String relativePathProjectDirectory ) |
| { |
| if ( StringUtils.isNotEmpty( relativePathProjectDirectory ) ) |
| { |
| return new File( checkoutDirectory, relativePathProjectDirectory ); |
| } |
| else |
| { |
| return checkoutDirectory; |
| } |
| } |
| |
| private ReleaseDescriptor loadReleaseDescriptor( ReleaseDescriptor releaseDescriptor, |
| ReleaseManagerListener listener ) |
| throws ReleaseExecutionException |
| { |
| try |
| { |
| updateListener( listener, "verify-release-configuration", PHASE_START ); |
| ReleaseDescriptor descriptor = configStore.read( releaseDescriptor ); |
| updateListener( listener, "verify-release-configuration", PHASE_END ); |
| return descriptor; |
| } |
| catch ( ReleaseDescriptorStoreException e ) |
| { |
| updateListener( listener, e.getMessage(), ERROR ); |
| |
| throw new ReleaseExecutionException( "Error reading stored configuration: " + e.getMessage(), e ); |
| } |
| } |
| |
| @Override |
| public void clean( ReleaseDescriptor releaseDescriptor, ReleaseManagerListener listener, |
| List<MavenProject> reactorProjects ) |
| { |
| ReleaseCleanRequest cleanRequest = new ReleaseCleanRequest(); |
| cleanRequest.setReleaseDescriptor( releaseDescriptor ); |
| cleanRequest.setReleaseManagerListener( listener ); |
| cleanRequest.setReactorProjects( reactorProjects ); |
| |
| clean( cleanRequest ); |
| } |
| |
| @Override |
| public void clean( ReleaseCleanRequest cleanRequest ) |
| { |
| updateListener( cleanRequest.getReleaseManagerListener(), "cleanup", PHASE_START ); |
| |
| getLogger().info( "Cleaning up after release..." ); |
| |
| configStore.delete( cleanRequest.getReleaseDescriptor() ); |
| Set<String> phases = new LinkedHashSet<>( preparePhases ); |
| phases.addAll( branchPhases ); |
| |
| for ( String name : phases ) |
| { |
| ReleasePhase phase = releasePhases.get( name ); |
| |
| phase.clean( cleanRequest.getReactorProjects() ); |
| } |
| |
| updateListener( cleanRequest.getReleaseManagerListener(), "cleanup", PHASE_END ); |
| } |
| |
| void setConfigStore( ReleaseDescriptorStore configStore ) |
| { |
| this.configStore = configStore; |
| } |
| |
| void updateListener( ReleaseManagerListener listener, String name, int state ) |
| { |
| if ( listener != null ) |
| { |
| switch ( state ) |
| { |
| case GOAL_START: |
| listener.goalStart( name, getGoalPhases( name ) ); |
| break; |
| case GOAL_END: |
| listener.goalEnd(); |
| break; |
| case PHASE_SKIP: |
| listener.phaseSkip( name ); |
| break; |
| case PHASE_START: |
| listener.phaseStart( name ); |
| break; |
| case PHASE_END: |
| listener.phaseEnd(); |
| break; |
| default: |
| listener.error( name ); |
| } |
| } |
| } |
| |
| private List<String> getGoalPhases( String name ) |
| { |
| List<String> phases = new ArrayList<>(); |
| |
| if ( "prepare".equals( name ) ) |
| { |
| phases.addAll( preparePhases ); |
| } |
| else if ( "perform".equals( name ) ) |
| { |
| phases.addAll( performPhases ); |
| } |
| else if ( "rollback".equals( name ) ) |
| { |
| phases.addAll( rollbackPhases ); |
| } |
| else if ( "branch".equals( name ) ) |
| { |
| phases.addAll( branchPhases ); |
| } |
| else if ( "updateVersions".equals( name ) ) |
| { |
| phases.addAll( updateVersionsPhases ); |
| } |
| |
| return Collections.unmodifiableList( phases ); |
| } |
| |
| private void logInfo( ReleaseResult result, String message ) |
| { |
| if ( result != null ) |
| { |
| result.appendInfo( message ); |
| } |
| |
| getLogger().info( message ); |
| } |
| |
| private void captureException( ReleaseResult result, ReleaseManagerListener listener, Exception e ) |
| { |
| updateListener( listener, e.getMessage(), ERROR ); |
| |
| result.appendError( e ); |
| |
| result.setResultCode( ReleaseResult.ERROR ); |
| } |
| |
| @Override |
| public void branch( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| boolean dryRun ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| branch( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, dryRun ); |
| } |
| |
| @Override |
| public void branch( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| boolean dryRun, ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| branch( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, dryRun, |
| listener ); |
| } |
| |
| @Override |
| public void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects ); |
| } |
| |
| @Override |
| public void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, |
| listener ); |
| } |
| |
| @Override |
| public void perform( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| boolean clean ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| perform( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, clean ); |
| } |
| |
| @Override |
| public ReleaseResult performWithResult( ReleaseDescriptor releaseDescriptor, Settings settings, |
| List<MavenProject> reactorProjects, ReleaseManagerListener listener ) |
| { |
| return performWithResult( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), |
| reactorProjects, listener ); |
| } |
| |
| @Override |
| public void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects ); |
| } |
| |
| @Override |
| public void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| boolean resume, boolean dryRun ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, resume, |
| dryRun ); |
| } |
| |
| @Override |
| public void prepare( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| boolean resume, boolean dryRun, ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| prepare( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, resume, |
| dryRun, listener ); |
| } |
| |
| @Override |
| public ReleaseResult prepareWithResult( ReleaseDescriptor releaseDescriptor, Settings settings, |
| List<MavenProject> reactorProjects, boolean resume, boolean dryRun, |
| ReleaseManagerListener listener ) |
| { |
| return prepareWithResult( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), |
| reactorProjects, resume, dryRun, listener ); |
| } |
| |
| @Override |
| public void rollback( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects, |
| ReleaseManagerListener listener ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| rollback( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, |
| listener ); |
| } |
| |
| @Override |
| public void rollback( ReleaseDescriptor releaseDescriptor, Settings settings, List<MavenProject> reactorProjects ) |
| throws ReleaseExecutionException, ReleaseFailureException |
| { |
| rollback( releaseDescriptor, new DefaultReleaseEnvironment().setSettings( settings ), reactorProjects, null ); |
| } |
| } |