提交 cf7d70d4 编写于 作者: K kohsuke

applied a patch from Martin Ficker. See http://www.nabble.com/Patch-for-Buildorder-td17625563.html


git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@9821 71c3de6d-444a-0410-be80-ed276b4c234a
上级 7dbdd472
......@@ -52,7 +52,7 @@ import java.awt.image.BufferedImage;
* @see Hudson#getDependencyGraph()
* @author Kohsuke Kawaguchi
*/
public final class DependencyGraph {
public final class DependencyGraph implements Comparator <AbstractProject> {
private Map<AbstractProject, List<AbstractProject>> forward = new HashMap<AbstractProject, List<AbstractProject>>();
private Map<AbstractProject, List<AbstractProject>> backward = new HashMap<AbstractProject, List<AbstractProject>>();
......@@ -312,4 +312,17 @@ public final class DependencyGraph {
};
public static final DependencyGraph EMPTY = new DependencyGraph(false);
/**
* Compare to Projects based on the topological order defined by this Dependency Graph
*/
public int compare(AbstractProject o1, AbstractProject o2) {
Set<AbstractProject> o1sdownstreams = getTransitiveDownstream(o1);
Set<AbstractProject> o2sdownstreams = getTransitiveDownstream(o2);
if (o1sdownstreams.contains(o2)) {
if (o2sdownstreams.contains(o1)) return 0; else return 1;
} else {
if (o2sdownstreams.contains(o1)) return -1; else return 0;
}
}
}
......@@ -26,7 +26,9 @@ import org.kohsuke.stapler.StaplerResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Level;
......@@ -123,13 +125,18 @@ public class BuildTrigger extends Publisher implements DependecyDeclarer, Matrix
if(trigger==null || !build.getResult().isWorseThan(trigger.getThreshold())) {
PrintStream logger = listener.getLogger();
//Trigger all downstream Project of the project, not just those defined by this buildtrigger
List <AbstractProject> downstreamProjects = build.getProject().getDownstreamProjects();
List <AbstractProject> downstreamProjects =
new ArrayList<AbstractProject> (build.getProject().getDownstreamProjects());
// Sort topologically
Collections.sort(downstreamProjects,
Collections.reverseOrder (Hudson.getInstance().getDependencyGraph()));
for (AbstractProject p : downstreamProjects) {
if(p.isDisabled()) {
logger.println(Messages.BuildTrigger_Disabled(p.getName()));
continue;
}
// this is not completely accurate, as a new build might be triggered
// between these calls
String name = p.getName()+" #"+p.getNextBuildNumber();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册