package hudson.plugins.svnmerge;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Publisher;
import org.kohsuke.stapler.DataBoundConstructor;
import java.io.IOException;
/**
* {@link Publisher} that integrates the current workspace to the upstream.
*
* @author Kohsuke Kawaguchi
*/
public class IntegrationPublisher extends Publisher {
@DataBoundConstructor
public IntegrationPublisher() {
}
@Override
public boolean perform(AbstractBuild<?,?> build, Launcher launcher, final BuildListener listener) throws InterruptedException, IOException {
// we only integrateAsync successful builds
if(build.getResult().isWorseThan(Result.SUCCESS))
return true;
IntegrateAction ia = build.getAction(IntegrateAction.class);
if(ia==null) {
listener.getLogger().println("Upstream Subversion URL is not specified. Configuration problem?");
return false;
}
if(ia.integrate(listener)<0)
build.setResult(Result.FAILURE);
return true;
}
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
public String getDisplayName() {
return "Integrate to upstream upon successful build";
}
@Override
public String getHelpFile() {
return "/plugin/svnmerge/help/auto-merge.html";
}
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}
}
}