Index: core/src/main/java/hudson/model/AbstractProject.java =================================================================== --- core/src/main/java/hudson/model/AbstractProject.java (revision 10328) +++ core/src/main/java/hudson/model/AbstractProject.java (working copy) @@ -75,6 +75,11 @@ * The quiet period. Null to delegate to the system default. */ private volatile Integer quietPeriod = null; + + /** + * This build was blocked because it's waiting for a (transitive) Upstreamproject to complete + */ + private volatile boolean isWaitingForUpstream; /** * If this project is configured to be only built on a certain label, @@ -494,19 +499,33 @@ *

* A project must be blocked if its own previous build is in progress, * but derived classes can also check other conditions. + * Optionally it is also blocked if any transitiv upstream Projects is waiting for a build. */ public boolean isBuildBlocked() { - return isBuilding(); + isWaitingForUpstream = false; + if (isBuilding()) return true; + // Block this Build if any of it upstream Projects is in the build queue ore being build. + for (AbstractProject upstream : Hudson.getInstance().getDependencyGraph().getTransitiveUpstream(this)) { + if (Hudson.getInstance().getQueue().contains(upstream) || upstream.isBuilding()) { + isWaitingForUpstream = true; + return true; + } + } + return false; } public String getWhyBlocked() { - AbstractBuild build = getLastBuild(); - Executor e = build.getExecutor(); - String eta=""; - if(e!=null) - eta = Messages.AbstractProject_ETA(e.getEstimatedRemainingTime()); - int lbn = build.getNumber(); - return Messages.AbstractProject_BuildInProgress(lbn,eta); + if (isWaitingForUpstream) { + return Messages.AbstractProject_WaitingForUpstream(); + } else { + AbstractBuild build = getLastBuild(); + Executor e = build.getExecutor(); + String eta=""; + if(e!=null) + eta = Messages.AbstractProject_ETA(e.getEstimatedRemainingTime()); + int lbn = build.getNumber(); + return Messages.AbstractProject_BuildInProgress(lbn,eta); + } } public final long getEstimatedDuration() { Index: core/src/main/resources/hudson/model/Messages.properties =================================================================== --- core/src/main/resources/hudson/model/Messages.properties (revision 10328) +++ core/src/main/resources/hudson/model/Messages.properties (working copy) @@ -7,6 +7,7 @@ AbstractProject.BuildInProgress=Build #{0} is already in progress{1} AbstractProject.Disabled=Build disabled AbstractProject.ETA=\ (ETA:{0}) +AbstractProject.WaitingForUpstream=Waiting for Upstream Project(s) to be build AbstractProject.NoSCM=No SCM AbstractProject.NoWorkspace=No workspace is available, so can''t check for updates. AbstractProject.PollingABorted=SCM polling aborted