public JoinAction( JoinTrigger joinTrigger, BuildTrigger buildTrigger, ArrayList<String> otherDownstream) { this.pendingDownstreamProjects = new LinkedList<String>(); if (buildTrigger != null) { for (AbstractProject project : buildTrigger.getChildProjects()) { if (!project.isDisabled()) { this.pendingDownstreamProjects.add(project.getName()); } } } for (String proj : otherDownstream) { this.pendingDownstreamProjects.add(proj.trim()); } this.joinProjects = joinTrigger.getJoinProjectsValue(); this.joinPublishers = joinTrigger.getJoinPublishers(); this.evenIfDownstreamUnstable = joinTrigger.getEvenIfDownstreamUnstable(); this.completedDownstreamProjects = new LinkedList<String>(); this.consideredBuilds = new LinkedList<String>(); this.overallResult = Result.SUCCESS; }
public synchronized void checkPendingDownstream( AbstractBuild<?, ?> owner, TaskListener listener) { if (pendingDownstreamProjects.isEmpty()) { listener.getLogger().println("All downstream projects complete!"); Result threshold = this.evenIfDownstreamUnstable ? Result.UNSTABLE : Result.SUCCESS; if (this.overallResult.isWorseThan(threshold)) { listener.getLogger().println("Minimum result threshold not met for join project"); } else { // Construct a launcher since CopyArchiver wants to get the // channel from it. We use the channel of the node where the // splitProject was built on. final Launcher launcher = new NoopLauncher(listener, owner); for (Publisher pub : this.joinPublishers) { try { pub.perform(owner, launcher, (BuildListener) listener); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } if (!JoinTrigger.canDeclare(owner.getProject())) { List<AbstractProject> projects = Items.fromNameList(joinProjects, AbstractProject.class); for (AbstractProject project : projects) { listener.getLogger().println("Scheduling join project: " + project.getName()); project.scheduleBuild(new JoinCause(owner)); } } } } else { listener .getLogger() .println( "Project " + owner.getProject().getName() + " still waiting for " + pendingDownstreamProjects.size() + " builds to complete"); } }