From 6f5c485e1aee07955075b060e84ff423a68a64bc Mon Sep 17 00:00:00 2001 From: kohsuke Date: Fri, 8 Aug 2008 18:50:14 +0000 Subject: [PATCH] added an utility method. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@11342 71c3de6d-444a-0410-be80-ed276b4c234a --- .../java/hudson/model/AbstractProject.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java index 0d55aa0547..ce4fa77f97 100644 --- a/core/src/main/java/hudson/model/AbstractProject.java +++ b/core/src/main/java/hudson/model/AbstractProject.java @@ -4,10 +4,12 @@ import hudson.AbortException; import hudson.FeedAdapter; import hudson.FilePath; import hudson.Launcher; +import hudson.remoting.AsyncFutureImpl; import hudson.maven.MavenModule; import hudson.model.Descriptor.FormException; import hudson.model.Fingerprint.RangeSet; import hudson.model.RunMap.Constructor; +import hudson.model.listeners.RunListener; import hudson.scm.ChangeLogSet; import hudson.scm.ChangeLogSet.Entry; import hudson.scm.NullSCM; @@ -48,6 +50,9 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.Vector; +import java.util.concurrent.Future; +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; import java.util.logging.Level; import java.util.logging.Logger; @@ -365,8 +370,40 @@ public abstract class AbstractProject

,R extends A * was noop */ public boolean scheduleBuild() { + return scheduleBuild(getQuietPeriod()); + } + + public boolean scheduleBuild(int quietPeriod) { if(isDisabled()) return false; - return Hudson.getInstance().getQueue().add(this, getQuietPeriod()); + return Hudson.getInstance().getQueue().add(this,quietPeriod); + } + + /** + * Schedules a build of this project, and returns a {@link Future} object + * to wait for the completion of the build. + */ + public Future scheduleBuild2(int quietPeriod) { + R lastBuild = getLastBuild(); + final int n; + if(lastBuild!=null) n = lastBuild.getNumber(); + else n = -1; + + Future f = new AsyncFutureImpl() { + final RunListener r = new RunListener(AbstractBuild.class) { + public void onCompleted(AbstractBuild r, TaskListener listener) { + if(r.getProject()==AbstractProject.this && r.getNumber()>n) { + set((R)r); + unregister(); + } + } + }; + + { r.register(); } + }; + + scheduleBuild(quietPeriod); + + return f; } /** -- GitLab