提交 131eefb1 编写于 作者: M mindless

design rejected, revert r14823,14824


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@14826 71c3de6d-444a-0410-be80-ed276b4c234a
上级 399cb794
......@@ -151,7 +151,7 @@ public class MatrixBuild extends AbstractBuild<MatrixProject,MatrixBuild> {
if (parameters != null) {
c.scheduleBuild(parameters);
} else {
c.scheduleBuild("Matrix");
c.scheduleBuild();
}
}
......
......@@ -259,8 +259,9 @@ public class MatrixConfiguration extends Project<MatrixConfiguration,MatrixRun>
*/
public static boolean useShortWorkspaceName = Boolean.getBoolean(MatrixConfiguration.class.getName()+".useShortWorkspaceName");
public boolean scheduleBuild(ParametersAction parameters) {
public boolean scheduleBuild(ParametersAction parameters) {
return Hudson.getInstance().getQueue().add(
new ParameterizedProjectTask(this, parameters.getParameters(), "Matrix"), getQuietPeriod());
}
new ParameterizedProjectTask(this, parameters.getParameters()), getQuietPeriod());
}
}
......@@ -554,7 +554,7 @@ public class MavenBuild extends AbstractBuild<MavenModule,MavenBuild> {
if(trigger) {
listener.getLogger().println(Messages.MavenBuild_Triggering(down.getName()));
downstreams.add(down);
down.scheduleBuild("Maven");
down.scheduleBuild();
}
}
}
......
......@@ -286,7 +286,7 @@ public final class MavenModuleSetBuild extends AbstractBuild<MavenModuleSet,Mave
if(!project.isAggregatorStyleBuild()) {
// start module builds
logger.println("Triggering "+project.getRootModule().getModuleName());
project.getRootModule().scheduleBuild("Maven");
project.getRootModule().scheduleBuild();
} else {
// do builds here
try {
......@@ -469,7 +469,7 @@ public final class MavenModuleSetBuild extends AbstractBuild<MavenModuleSet,Mave
if(getResult().isBetterOrEqualTo(Result.SUCCESS)) {
for(AbstractProject down : getProject().getDownstreamProjects()) {
listener.getLogger().println(Messages.MavenBuild_Triggering(down.getName()));
down.scheduleBuild("Maven");
down.scheduleBuild();
}
}
}
......
......@@ -395,49 +395,33 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
/**
* Schedules a build of this project.
*
* @param triggeredBy
* String describing how build was triggered.
* @return
* true if the project is actually added to the queue.
* false if the queue contained it and therefore the add()
* was noop
*/
public boolean scheduleBuild(String triggeredBy) {
return scheduleBuild(getQuietPeriod(), triggeredBy);
public boolean scheduleBuild() {
return scheduleBuild(getQuietPeriod());
}
public boolean scheduleBuild(int quietPeriod, String triggeredBy) {
public boolean scheduleBuild(int quietPeriod) {
if (isDisabled())
return false;
return Hudson.getInstance().getQueue().add(
new ParameterizedProjectTask(this, getDefaultParametersValues(), triggeredBy),
quietPeriod);
}
/**
* @deprecated
* As of 1.279. Use {@link #scheduleBuild(String)} instead.
*/
@Deprecated
public boolean scheduleBuild() {
return scheduleBuild(getQuietPeriod(), null);
}
/**
* @deprecated
* As of 1.279. Use {@link #scheduleBuild(int, String)} instead.
*/
@Deprecated
public boolean scheduleBuild(int quietPeriod) {
return scheduleBuild(quietPeriod, null);
if (isParameterized())
return Hudson.getInstance().getQueue().add(
new ParameterizedProjectTask(this, getDefaultParametersValues()), quietPeriod);
else
return Hudson.getInstance().getQueue().add(this, quietPeriod);
}
private List<ParameterValue> getDefaultParametersValues() {
ParametersDefinitionProperty paramDefProp = getProperty(ParametersDefinitionProperty.class);
ArrayList<ParameterValue> defValues = new ArrayList<ParameterValue>();
// In case isParameterized() is false.
/*
* This check is made ONLY if someone will call this method even if isParametrized() is false.
*/
if(paramDefProp == null)
return defValues;
......@@ -457,7 +441,7 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
* Schedules a build of this project, and returns a {@link Future} object
* to wait for the completion of the build.
*/
public Future<R> scheduleBuild2(int quietPeriod, String triggeredBy) {
public Future<R> scheduleBuild2(int quietPeriod) {
R lastBuild = getLastBuild();
final int n;
if(lastBuild!=null) n = lastBuild.getNumber();
......@@ -476,20 +460,11 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
{ r.register(); }
};
scheduleBuild(quietPeriod, triggeredBy);
scheduleBuild(quietPeriod);
return f;
}
/**
* @deprecated
* As of 1.279. Use {@link #scheduleBuild2(int, String)} instead.
*/
@Deprecated
public Future<R> scheduleBuild2(int quietPeriod) {
return scheduleBuild2(quietPeriod, null);
}
/**
* Schedules a polling of this project.
*/
......@@ -987,20 +962,22 @@ public abstract class AbstractProject<P extends AbstractProject<P,R>,R extends A
String delay = req.getParameter("delay");
if (delay!=null) {
// TODO: more unit handling
if(delay.endsWith("sec")) delay=delay.substring(0,delay.length()-3);
if(delay.endsWith("secs")) delay=delay.substring(0,delay.length()-4);
}
try {
User user = User.current();
scheduleBuild(delay != null ? Integer.parseInt(delay) : getQuietPeriod(),
"User " + (user != null ? user.getId() : "anonymous"));
} catch (NumberFormatException e) {
throw new ServletException("Invalid delay parameter value: "+delay);
if (!isDisabled()) {
try {
// TODO: more unit handling
if(delay.endsWith("sec")) delay=delay.substring(0,delay.length()-3);
if(delay.endsWith("secs")) delay=delay.substring(0,delay.length()-4);
Hudson.getInstance().getQueue().add(this, Integer.parseInt(delay));
} catch (NumberFormatException e) {
throw new ServletException("Invalid delay parameter value: "+delay);
}
}
} else {
scheduleBuild();
}
rsp.forwardToPreviousPage(req);
}
/**
* Supports build trigger with parameters via an HTTP GET or POST.
* Currently only String parameters are supported.
......
......@@ -12,10 +12,6 @@ import hudson.model.Queue.Task;
* @author Kohsuke Kawaguchi
*/
public interface BuildableItem extends Item, Task {
boolean scheduleBuild(String triggeredBy);
boolean scheduleBuild(int quietPeriod, String triggeredBy);
/** @deprecated since 1.279 */
@Deprecated boolean scheduleBuild();
/** @deprecated since 1.279 */
@Deprecated boolean scheduleBuild(int quietPeriod);
boolean scheduleBuild();
boolean scheduleBuild(int quietPeriod);
}
......@@ -63,7 +63,6 @@ import hudson.tasks.Mailer;
import hudson.tasks.Publisher;
import hudson.triggers.Trigger;
import hudson.triggers.TriggerDescriptor;
import hudson.triggers.TriggerListener;
import hudson.triggers.Triggers;
import hudson.util.CaseInsensitiveComparator;
import hudson.util.ClockDifference;
......@@ -309,7 +308,7 @@ public final class Hudson extends AbstractModelObject implements ItemGroup<TopLe
public transient volatile TcpSlaveAgentListener tcpSlaveAgentListener;
/**
* List of registered {@link ItemListener}s.
* List of registered {@link JobListener}s.
*/
private transient final CopyOnWriteList<ItemListener> itemListeners = new CopyOnWriteList<ItemListener>();
......@@ -486,7 +485,6 @@ public final class Hudson extends AbstractModelObject implements ItemGroup<TopLe
UsageStatistics.register();
LoadStatistics.register();
NodeProvisioner.launch();
new TriggerListener().register();
}
public TcpSlaveAgentListener getTcpSlaveAgentListener() {
......@@ -666,7 +664,7 @@ public final class Hudson extends AbstractModelObject implements ItemGroup<TopLe
* Adds a new {@link JobListener}.
*
* @deprecated
* Use {@code getJobListeners().add(l)} instead.
* Use {@code getJobListners().add(l)} instead.
*/
public void addListener(JobListener l) {
itemListeners.add(new JobListenerAdapter(l));
......@@ -676,7 +674,7 @@ public final class Hudson extends AbstractModelObject implements ItemGroup<TopLe
* Deletes an existing {@link JobListener}.
*
* @deprecated
* Use {@code getJobListeners().remove(l)} instead.
* Use {@code getJobListners().remove(l)} instead.
*/
public boolean removeListener(JobListener l ) {
return itemListeners.remove(new JobListenerAdapter(l));
......
......@@ -19,7 +19,6 @@ public class ParameterizedProjectTask extends QueueTaskFilter {
private final AbstractProject<?,?> project;
private final List<ParameterValue> parameters;
private final String triggeredBy;
private static long COUNTER = System.currentTimeMillis();
......@@ -28,40 +27,28 @@ public class ParameterizedProjectTask extends QueueTaskFilter {
*/
private final String key = Long.toString(COUNTER++);
public ParameterizedProjectTask(AbstractProject<?,?> project, List<ParameterValue> parameters, String triggeredBy) {
public ParameterizedProjectTask(AbstractProject<?,?> project, List<ParameterValue> parameters) {
super(project);
this.project = project;
this.parameters = parameters;
this.triggeredBy = triggeredBy;
}
/** @deprecated since 1.279 */
@Deprecated
public ParameterizedProjectTask(AbstractProject<?,?> project, List<ParameterValue> parameters) {
this(project, parameters, null);
}
public AbstractProject<?, ?> getProject() {
return project;
}
public List<ParameterValue> getParameters() {
return parameters;
}
return project;
}
public String getTriggeredBy() {
return triggeredBy;
}
public List<ParameterValue> getParameters() {
return parameters;
}
@Override
@Override
public Executable createExecutable() throws IOException {
AbstractBuild<?, ?> build = project.createExecutable();
if (project.isParameterized())
build.addAction(new ParametersAction(parameters, build));
build.addAction(new ParametersAction(parameters, build));
return build;
}
/**
* Cancels a scheduled build.
*/
......@@ -77,7 +64,6 @@ public class ParameterizedProjectTask extends QueueTaskFilter {
public int hashCode() {
final int prime = 31;
int result = 1;
// triggeredBy is NOT included so different triggers won't schedule duplicate builds
result = prime * result
+ ((parameters == null) ? 0 : parameters.hashCode());
result = prime * result + ((project == null) ? 0 : project.hashCode());
......@@ -93,7 +79,6 @@ public class ParameterizedProjectTask extends QueueTaskFilter {
if (getClass() != obj.getClass())
return false;
ParameterizedProjectTask other = (ParameterizedProjectTask) obj;
// triggeredBy is NOT checked so different triggers won't schedule duplicate builds
if (parameters == null) {
if (other.parameters != null)
return false;
......
......@@ -74,7 +74,8 @@ public class ParametersDefinitionProperty extends JobProperty<AbstractProject<?,
values.add(d.createValue(req, jo));
}
scheduleBuild(values);
Hudson.getInstance().getQueue().add(
new ParameterizedProjectTask(owner, values), 0);
// send the user back to the job top page.
rsp.sendRedirect(".");
......@@ -91,20 +92,13 @@ public class ParametersDefinitionProperty extends JobProperty<AbstractProject<?,
}
}
scheduleBuild(values);
Hudson.getInstance().getQueue().add(
new ParameterizedProjectTask(owner, values), 0);
// send the user back to the job top page.
rsp.sendRedirect(".");
}
private boolean scheduleBuild(List<ParameterValue> parameters) {
User user = User.current();
return Hudson.getInstance().getQueue().add(
new ParameterizedProjectTask(owner, parameters,
"User " + (user != null ? user.getId() : "anonymous")),
0);
}
/**
* Gets the {@link ParameterDefinition} of the given name, if any.
*/
......
......@@ -4,7 +4,6 @@ import hudson.BulkChange;
import hudson.Util;
import hudson.XmlFile;
import hudson.model.Node.Mode;
import hudson.model.listeners.ItemListener;
import hudson.triggers.SafeTimerTask;
import hudson.triggers.Trigger;
import hudson.util.OneShotEvent;
......@@ -170,7 +169,7 @@ public class Queue extends ResourceController implements Saveable {
while ((line = in.readLine()) != null) {
AbstractProject j = Hudson.getInstance().getItemByFullName(line, AbstractProject.class);
if (j != null)
j.scheduleBuild("Loading saved queue");
j.scheduleBuild();
}
in.close();
// discard the queue file now that we are done
......@@ -303,11 +302,6 @@ public class Queue extends ResourceController implements Saveable {
}
scheduleMaintenance(); // let an executor know that a new item is in the queue.
// let listeners know that a new item is in the queue.
for (ItemListener l : Hudson.getInstance().getJobListeners()) {
l.onScheduled(p);
}
return true;
}
......
......@@ -3,7 +3,7 @@ package hudson.model.listeners;
import hudson.ExtensionPoint;
import hudson.model.Hudson;
import hudson.model.Item;
import hudson.model.Queue;
import hudson.model.Job;
/**
* Receives notifications about CRUD operations of {@link Item}.
......@@ -19,7 +19,8 @@ public class ItemListener implements ExtensionPoint {
}
/**
* Called after all the jobs are loaded from disk into {@link Hudson} object.
* Called after all the jobs are loaded from disk into {@link Hudson}
* object.
*/
public void onLoaded() {
}
......@@ -46,16 +47,6 @@ public class ItemListener implements ExtensionPoint {
public void onRenamed(Item item, String oldName, String newName) {
}
/**
* Called when a {@link Queue.Task} is scheduled in the queue.
*
* @param task
* The pending task.
* @since 1.279
*/
public void onScheduled(Queue.Task task) {
}
/**
* Registers this instance to Hudson and start getting notifications.
*/
......
......@@ -141,7 +141,7 @@ public class BuildTrigger extends Publisher implements DependecyDeclarer, Matrix
// this is not completely accurate, as a new build might be triggered
// between these calls
String name = p.getName()+" #"+p.getNextBuildNumber();
if(p.scheduleBuild("Upstream project " + build.getProject().getDisplayName())) {
if(p.scheduleBuild()) {
logger.println(Messages.BuildTrigger_Triggering(name));
} else {
logger.println(Messages.BuildTrigger_InQueue(name));
......
......@@ -412,7 +412,7 @@ public class SCMTrigger extends Trigger<SCMedItem> {
if(foundChanges) {
String name = " #"+job.asProject().getNextBuildNumber();
if(scheduleBuild(job)) {
if(job.scheduleBuild()) {
LOGGER.info("SCM changes detected in "+ job.getName()+". Triggering "+name);
} else {
LOGGER.info("SCM changes detected in "+ job.getName()+". Job is already in the queue");
......
......@@ -29,7 +29,7 @@ public class TimerTrigger extends Trigger<BuildableItem> {
}
public void run() {
scheduleBuild(job, 0);
job.scheduleBuild(0);
}
public TriggerDescriptor getDescriptor() {
......
......@@ -8,7 +8,6 @@ import hudson.slaves.ComputerRetentionWork;
import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.model.Build;
import hudson.model.BuildableItem;
import hudson.model.ComputerSet;
import hudson.model.Describable;
import hudson.model.FingerprintCleanupThread;
......@@ -229,20 +228,4 @@ public abstract class Trigger<J extends Item> implements Describable<Trigger<?>>
}
}, 1000*10);
}
/**
* Schedule build for given item.
* @since 1.279
*/
protected boolean scheduleBuild(BuildableItem job) {
return job.scheduleBuild(getDescriptor().getDisplayName());
}
/**
* Schedule build for given item.
* @since 1.279
*/
protected boolean scheduleBuild(BuildableItem job, int quietPeriod) {
return job.scheduleBuild(quietPeriod, getDescriptor().getDisplayName());
}
}
package hudson.triggers;
import hudson.model.Job;
import hudson.model.Queue.Task;
import hudson.model.ParameterizedProjectTask;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.model.listeners.ItemListener;
import hudson.model.listeners.RunListener;
import java.util.HashMap;
/**
* Use ItemListener and RunListener interfaces to record how each build
* was triggered in the job console output.
* @author Alan Harder
*/
public class TriggerListener extends ItemListener {
private HashMap<Job,String> triggerMap = new HashMap<Job,String>();
/**
* Listen for scheduled builds and remember how they were triggered,
* so that info can be recorded when build actually starts.
*/
@Override
public void onScheduled(Task task) {
if (task instanceof ParameterizedProjectTask) {
Job job = ((ParameterizedProjectTask)task).getProject();
synchronized (this) {
if (!triggerMap.containsKey(job))
triggerMap.put(job, ((ParameterizedProjectTask)task).getTriggeredBy());
}
}
}
@Override
public void register() {
super.register();
new RunListener<Run>(Run.class) {
@Override
public void onStarted(Run r, TaskListener listener) {
String triggeredBy;
synchronized (TriggerListener.this) {
triggeredBy = triggerMap.remove(r.getParent());
}
if (triggeredBy != null) {
listener.getLogger().println("Build triggered by " + triggeredBy);
}
}
}.register();
}
}
......@@ -51,9 +51,7 @@ public class QueueTest extends HudsonTestCase {
assertEquals(1,q.getItems().length);
// did it bind back to the same object?
Queue.Task task = q.getItems()[0].task;
assertTrue(task instanceof ParameterizedProjectTask);
assertSame(((ParameterizedProjectTask)task).getProject(),testProject);
assertSame(q.getItems()[0].task,testProject);
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册