提交 b55337db 编写于 作者: H huybrechts

[HUDSON-2659] allow canceling of parameterized builds in the queue

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14731 71c3de6d-444a-0410-be80-ed276b4c234a
上级 94530bc5
......@@ -6,6 +6,11 @@ import hudson.util.QueueTaskFilter;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
/**
* A task representing a project that should be built with a certain set of
* parameter values
......@@ -15,19 +20,45 @@ public class ParameterizedProjectTask extends QueueTaskFilter {
private final AbstractProject<?,?> project;
private final List<ParameterValue> parameters;
private static long COUNTER = System.currentTimeMillis();
/**
* Used for identifying the task in the queue
*/
private final String key = Long.toString(COUNTER++);
public ParameterizedProjectTask(AbstractProject<?,?> project, List<ParameterValue> parameters) {
super(project);
this.project = project;
this.parameters = parameters;
}
public AbstractProject<?, ?> getProject() {
return project;
}
@Override
public List<ParameterValue> getParameters() {
return parameters;
}
@Override
public Executable createExecutable() throws IOException {
AbstractBuild<?, ?> build = project.createExecutable();
build.addAction(new ParametersAction(parameters, build));
return build;
}
/**
* Cancels a scheduled build.
*/
public void doCancelQueue( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException {
project.checkPermission(AbstractProject.BUILD);
Hudson.getInstance().getQueue().cancel(this);
rsp.forwardToPreviousPage(req);
}
@Override
public int hashCode() {
......@@ -59,4 +90,12 @@ public class ParameterizedProjectTask extends QueueTaskFilter {
}
return true;
}
public String getUrl() {
return getProject().getUrl() + "/parameters/queued/" + key + "/";
}
public String getQueueKey() {
return key;
}
}
......@@ -160,7 +160,19 @@ public class ParametersDefinitionProperty extends JobProperty<AbstractProject<?,
public String getUrlName() {
return "parameters";
}
public ParameterizedProjectTask getQueued(String key) {
Queue.Item[] items = Hudson.getInstance().getQueue().getItems();
for (Queue.Item item: items) {
if (item.task instanceof ParameterizedProjectTask) {
ParameterizedProjectTask ppt = (ParameterizedProjectTask) item.task;
if (ppt.getProject() == owner && ppt.getQueueKey().equals(key)) {
return ppt;
}
}
}
return null;
}
static {
ParameterDefinition.LIST.add(StringParameterDefinition.DESCRIPTOR);
......
package hudson.model;
import hudson.BulkChange;
import hudson.Util;
import hudson.XmlFile;
import hudson.BulkChange;
import hudson.model.Node.Mode;
import hudson.triggers.SafeTimerTask;
import hudson.triggers.Trigger;
import hudson.util.OneShotEvent;
import hudson.util.XStream2;
import hudson.util.TimeUnit2;
import hudson.util.XStream2;
import java.io.BufferedReader;
import java.io.File;
......@@ -24,16 +24,19 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import java.util.TreeSet;
import java.util.NoSuchElementException;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.timer.Timer;
import javax.servlet.ServletException;
import org.acegisecurity.AccessDeniedException;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;
......@@ -745,6 +748,16 @@ public class Queue extends ResourceController implements Saveable {
* instead of exception.
*/
boolean hasAbortPermission();
/**
* The relative url for this task
*/
String getUrl();
/**
* Called from queue.jelly.
*/
void doCancelQueue( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException;
}
public interface Executable extends Runnable {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册