|
@@ -35,6 +35,8 @@ |
|
|
import hudson.init.InitMilestone; |
|
|
import hudson.init.Initializer; |
|
|
import hudson.model.Action; |
|
|
import hudson.model.BallColor; |
|
|
import hudson.model.BuildAuthorizationToken; |
|
|
import hudson.model.BuildableItem; |
|
|
import hudson.model.Cause; |
|
|
import hudson.model.Computer; |
|
@@ -54,6 +56,7 @@ |
|
|
import hudson.model.TaskListener; |
|
|
import hudson.model.TopLevelItem; |
|
|
import hudson.model.TopLevelItemDescriptor; |
|
|
import hudson.model.listeners.ItemListener; |
|
|
import hudson.model.listeners.SCMListener; |
|
|
import hudson.model.queue.CauseOfBlockage; |
|
|
import hudson.model.queue.QueueTaskFuture; |
|
@@ -99,6 +102,8 @@ |
|
|
import org.kohsuke.accmod.Restricted; |
|
|
import org.kohsuke.accmod.restrictions.DoNotUse; |
|
|
import org.kohsuke.accmod.restrictions.NoExternalUse; |
|
|
import org.kohsuke.stapler.HttpRedirect; |
|
|
import org.kohsuke.stapler.HttpResponse; |
|
|
import org.kohsuke.stapler.QueryParameter; |
|
|
import org.kohsuke.stapler.StaplerRequest; |
|
|
import org.kohsuke.stapler.StaplerResponse; |
|
@@ -124,6 +129,7 @@ |
|
|
* TODO is it important to persist this? {@link hudson.model.AbstractProject#pollingBaseline} is not persisted. |
|
|
*/ |
|
|
private transient volatile Map<String,SCMRevisionState> pollingBaselines; |
|
|
private volatile boolean disabled; |
|
|
|
|
|
public WorkflowJob(ItemGroup parent, String name) { |
|
|
super(parent, name); |
|
@@ -197,6 +203,8 @@ public void setDefinition(FlowDefinition definition) { |
|
|
} else { |
|
|
quietPeriod = null; |
|
|
} |
|
|
|
|
|
makeDisabled(json.optBoolean("disable")); |
|
|
} |
|
|
|
|
|
|
|
@@ -215,7 +223,8 @@ public void setDefinition(FlowDefinition definition) { |
|
|
} |
|
|
} |
|
|
} |
|
|
return true; // why not? |
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866: return ParameterizedJobMixIn.ParameterizedJob.super.isBuildable(); |
|
|
return !isDisabled() && !isHoldOffBuildUntilSave(); |
|
|
} |
|
|
|
|
|
@Override protected RunMap<WorkflowRun> _getRuns() { |
|
@@ -258,7 +267,11 @@ public void setDefinition(FlowDefinition definition) { |
|
|
return buildMixIn.createHistoryWidget(); |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 remove override |
|
|
@Override public Queue.Executable createExecutable() throws IOException { |
|
|
if (isDisabled()) { |
|
|
return null; |
|
|
} |
|
|
return buildMixIn.newBuild(); |
|
|
} |
|
|
|
|
@@ -304,6 +317,62 @@ public boolean isParameterized() { |
|
|
return createParameterizedJobMixIn().isParameterized(); |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 @Override |
|
|
public boolean isDisabled() { |
|
|
return disabled; |
|
|
} |
|
|
|
|
|
@Restricted(DoNotUse.class) |
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 @Override |
|
|
public void setDisabled(boolean disabled) { |
|
|
this.disabled = disabled; |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 @Override |
|
|
public boolean supportsMakeDisabled() { |
|
|
return true; |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 remove override |
|
|
public void makeDisabled(boolean b) throws IOException { |
|
|
if (isDisabled() == b) { |
|
|
return; // noop |
|
|
} |
|
|
if (b && !supportsMakeDisabled()) { |
|
|
return; // do nothing if the disabling is unsupported |
|
|
} |
|
|
setDisabled(b); |
|
|
if (b) { |
|
|
Jenkins.getActiveInstance().getQueue().cancel(this); |
|
|
} |
|
|
save(); |
|
|
ItemListener.fireOnUpdated(this); |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 remove override |
|
|
@RequirePOST |
|
|
public HttpResponse doDisable() throws IOException, ServletException { |
|
|
checkPermission(CONFIGURE); |
|
|
makeDisabled(true); |
|
|
return new HttpRedirect("."); |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 remove override |
|
|
@RequirePOST |
|
|
public HttpResponse doEnable() throws IOException, ServletException { |
|
|
checkPermission(CONFIGURE); |
|
|
makeDisabled(false); |
|
|
return new HttpRedirect("."); |
|
|
} |
|
|
|
|
|
@Override public BallColor getIconColor() { |
|
|
if (isDisabled()) { |
|
|
return isBuilding() ? BallColor.DISABLED_ANIME : BallColor.DISABLED; |
|
|
} else { |
|
|
return super.getIconColor(); |
|
|
} |
|
|
} |
|
|
|
|
|
@SuppressWarnings("deprecation") |
|
|
@Override public hudson.model.BuildAuthorizationToken getAuthToken() { |
|
|
return authToken; |
|
@@ -574,8 +643,34 @@ public void replaceAction(Action a) { |
|
|
return typical; |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 remove override |
|
|
public boolean schedulePolling() { |
|
|
if (isDisabled()) { |
|
|
return false; |
|
|
} |
|
|
SCMTrigger scmt = getSCMTrigger(); |
|
|
if (scmt == null) { |
|
|
return false; |
|
|
} |
|
|
scmt.run(); |
|
|
return true; |
|
|
} |
|
|
|
|
|
// TODO https://github.com/jenkinsci/jenkins/pull/2866 remove override |
|
|
@SuppressWarnings("deprecation") |
|
|
public void doPolling(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { |
|
|
BuildAuthorizationToken.checkPermission((Job) this, getAuthToken(), req, rsp); |
|
|
schedulePolling(); |
|
|
rsp.sendRedirect("."); |
|
|
} |
|
|
|
|
|
@SuppressFBWarnings(value="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE", justification="TODO 1.653+ switch to Jenkins.getInstanceOrNull") |
|
|
@Override public PollingResult poll(TaskListener listener) { |
|
|
if (!isBuildable()) { |
|
|
listener.getLogger().println("Build disabled"); |
|
|
return PollingResult.NO_CHANGES; |
|
|
} |
|
|
// TODO 2.11+ call SCMDecisionHandler |
|
|
// TODO call SCMPollListener |
|
|
WorkflowRun lastBuild = getLastBuild(); |
|
|
if (lastBuild == null) { |
|
@@ -663,8 +758,9 @@ public void replaceAction(Action a) { |
|
|
} |
|
|
|
|
|
@Override protected void performDelete() throws IOException, InterruptedException { |
|
|
super.performDelete(); |
|
|
makeDisabled(true); |
|
|
// TODO call SCM.processWorkspaceBeforeDeletion |
|
|
super.performDelete(); |
|
|
} |
|
|
|
|
|
@Initializer(before=InitMilestone.EXTENSIONS_AUGMENTED) |
|
|