com.atlassian.maven.plugins.jgitflow.manager.DefaultFlowReleaseManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jgitflow-maven-plugin Show documentation
Show all versions of jgitflow-maven-plugin Show documentation
A maven plugin to support doing git-flow releases
The newest version!
package com.atlassian.maven.plugins.jgitflow.manager;
import java.util.List;
import com.atlassian.jgitflow.core.BranchType;
import com.atlassian.jgitflow.core.JGitFlow;
import com.atlassian.jgitflow.core.JGitFlowReporter;
import com.atlassian.jgitflow.core.ReleaseMergeResult;
import com.atlassian.jgitflow.core.exception.JGitFlowException;
import com.atlassian.maven.plugins.jgitflow.ReleaseContext;
import com.atlassian.maven.plugins.jgitflow.exception.MavenJGitFlowException;
import com.atlassian.maven.plugins.jgitflow.extension.ReleaseFinishPluginExtension;
import com.atlassian.maven.plugins.jgitflow.extension.ReleaseStartPluginExtension;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
import org.apache.maven.shared.release.util.ReleaseUtil;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
/**
* @since version
*/
@Component(role = FlowReleaseManager.class, hint = "release")
public class DefaultFlowReleaseManager extends AbstractProductionBranchManager
{
@Requirement
private ReleaseStartPluginExtension startExtension;
@Requirement
private ReleaseFinishPluginExtension finishExtension;
public DefaultFlowReleaseManager()
{
super(BranchType.RELEASE);
}
@Override
public void start(ReleaseContext ctx, List reactorProjects, MavenSession session) throws MavenJGitFlowException
{
JGitFlow flow = null;
try
{
String releaseLabel = getStartLabelAndRunPreflight(ctx, reactorProjects, session);
flow = jGitFlowProvider.gitFlow();
startExtension.init(ctx.getReleaseStartExtension());
flow.releaseStart(releaseLabel)
.setAllowUntracked(ctx.isAllowUntracked())
.setPush(ctx.isPushReleases())
.setStartCommit(ctx.getStartCommit())
.setScmMessagePrefix(ctx.getScmCommentPrefix())
.setScmMessageSuffix(ctx.getScmCommentSuffix())
.setExtension(startExtension)
.call();
}
catch (JGitFlowException e)
{
throw new MavenJGitFlowException("Error starting release: " + e.getMessage(), e);
}
finally
{
if (null != flow)
{
JGitFlowReporter.get().flush();
}
}
}
@Override
public void finish(ReleaseContext ctx, List reactorProjects, MavenSession session) throws MavenJGitFlowException
{
JGitFlow flow = null;
try
{
finishExtension.init(ctx.getReleaseFinishExtension());
String releaseLabel = getFinishLabelAndRunPreflight(ctx, reactorProjects, session);
flow = jGitFlowProvider.gitFlow();
JGitFlowReporter reporter = JGitFlowReporter.get();
MavenProject originalRootProject = ReleaseUtil.getRootProject(reactorProjects);
getLogger().info("running jgitflow release finish...");
ReleaseMergeResult mergeResult = flow.releaseFinish(releaseLabel)
.setPush(ctx.isPushReleases())
.setKeepBranch(ctx.isKeepBranch())
.setNoTag(ctx.isNoTag())
.setSquash(ctx.isSquash())
.setAllowUntracked(ctx.isAllowUntracked())
.setNoMerge(ctx.isNoReleaseMerge())
.setScmMessagePrefix(ctx.getScmCommentPrefix())
.setScmMessageSuffix(ctx.getScmCommentSuffix())
.setExtension(finishExtension)
.call();
if (!mergeResult.wasSuccessful())
{
if (mergeResult.masterHasProblems())
{
getLogger().error("Error merging into " + flow.getMasterBranchName() + ":");
getLogger().error(mergeResult.getMasterResult().toString());
getLogger().error("see .git/jgitflow.log for more info");
}
if (mergeResult.developHasProblems())
{
getLogger().error("Error merging into " + flow.getDevelopBranchName() + ":");
getLogger().error(mergeResult.getDevelopResult().toString());
getLogger().error("see .git/jgitflow.log for more info");
}
throw new MavenJGitFlowException("Error while merging release!");
}
}
catch (JGitFlowException e)
{
throw new MavenJGitFlowException("Error finishing release: " + e.getMessage(), e);
}
finally
{
if (null != flow)
{
JGitFlowReporter.get().flush();
}
}
}
}