diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index 3f477f83e536bf7e01007d43c29f9b8fbccb003b..319f355fd508bbb2731bd50dc876aded4faf742b 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -324,11 +324,13 @@ public abstract class AbstractProject

,R extends A buildMixIn.onLoad(parent, name); builds = buildMixIn.getRunMap(); triggers().setOwner(this); - for (Trigger t : triggers()) { - try { - t.start(this, Items.currentlyUpdatingByXml()); - } catch (Throwable e) { - LOGGER.log(Level.WARNING, "could not start trigger while loading project '" + getFullName() + "'", e); + if (isBuildable()) { + for (Trigger t : triggers()) { + try { + t.start(this, Items.currentlyUpdatingByXml()); + } catch (Throwable e) { + LOGGER.log(Level.WARNING, "could not start trigger while loading project '" + getFullName() + "'", e); + } } } if(scm==null) @@ -1879,8 +1881,10 @@ public abstract class AbstractProject

,R extends A for (Trigger t : triggers()) t.stop(); triggers.replaceBy(buildDescribable(req, Trigger.for_(this))); - for (Trigger t : triggers()) - t.start(this,true); + if (isBuildable()) { + for (Trigger t : triggers()) + t.start(this, true); + } } /** diff --git a/core/src/main/java/hudson/triggers/Trigger.java b/core/src/main/java/hudson/triggers/Trigger.java index 6f5c922d2603d06c324cc8858cc1a585bca5f84e..a6b6443a0a1c51b3f90c98e959a337c4d3d63297 100644 --- a/core/src/main/java/hudson/triggers/Trigger.java +++ b/core/src/main/java/hudson/triggers/Trigger.java @@ -99,6 +99,8 @@ public abstract class Trigger implements Describable> * * This method is invoked when {@link #Trigger(String)} is used * to create an instance, and the crontab matches the current time. + *

+ * Maybe run even before {@link #start(hudson.model.Item, boolean)}, prepare for it. */ public void run() {} @@ -241,6 +243,10 @@ public abstract class Trigger implements Describable> // FIXME allow to set a global crontab spec previousSynchronousPolling = scmd.getExecutor().submit(new DependencyRunner(new ProjectRunnable() { public void run(AbstractProject p) { + if (!p.isBuildable()) { + return; //skip disabled/copied project + } + for (Trigger t : (Collection) p.getTriggers().values()) { if (t instanceof SCMTrigger) { LOGGER.fine("synchronously triggering SCMTrigger for project " + t.job.getName()); @@ -256,6 +262,12 @@ public abstract class Trigger implements Describable> // Process all triggers, except SCMTriggers when synchronousPolling is set for (ParameterizedJobMixIn.ParameterizedJob p : inst.getAllItems(ParameterizedJobMixIn.ParameterizedJob.class)) { + if (p instanceof AbstractProject) { + if (!((AbstractProject) p).isBuildable()) { + continue; // skip disabled/copied project + } + } + for (Trigger t : p.getTriggers().values()) { if (! (t instanceof SCMTrigger && scmd.synchronousPolling)) { LOGGER.log(Level.FINE, "cron checking {0} with spec ‘{1}’", new Object[] {p, t.spec.trim()});