Skip to content
Permalink
Browse files

Merge pull request #23 from pskumar448/master

JENKINS-32499 BuildGraph doesn't show up if there is a null run
  • Loading branch information...
pskumar448 committed May 8, 2016
2 parents e7ceca2 + f368bf1 commit f1f892fb2297779f35f92a156d6386e80c1b6045
Showing with 60 additions and 0 deletions.
  1. +7 −0 pom.xml
  2. +53 −0 src/main/java/org/jenkinsci/plugins/buildgraphview/FlowDownStreamRunDeclarer.java
@@ -55,6 +55,13 @@
<optional>true</optional>
</dependency>

<dependency>
<groupId>com.cloudbees.plugins</groupId>
<artifactId>build-flow-plugin</artifactId>
<version>0.18</version>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
@@ -0,0 +1,53 @@
package org.jenkinsci.plugins.buildgraphview;

import com.cloudbees.plugins.flow.FlowCause;
import com.cloudbees.plugins.flow.FlowRun;
import com.cloudbees.plugins.flow.JobInvocation;
import hudson.Extension;
import hudson.model.Run;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;

/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
@Extension(optional = true)
public class FlowDownStreamRunDeclarer extends DownStreamRunDeclarer {

@Override
public List<Run> getDownStream(Run r) throws ExecutionException, InterruptedException {

if (r instanceof FlowRun) {
FlowRun f = (FlowRun) r;
return getOutgoingEdgeRuns(f, f.getStartJob());
}

List<Run> runs = Collections.emptyList();
FlowCause cause = (FlowCause) r.getCause(FlowCause.class);
FlowRun f;
while (runs.isEmpty() && cause != null) {
f = cause.getFlowRun();
runs = getOutgoingEdgeRuns(f, cause.getAssociatedJob());
cause = (FlowCause) cause.getFlowRun().getCause(FlowCause.class);
}

return runs;
}

private List<Run> getOutgoingEdgeRuns(FlowRun f, JobInvocation start) throws ExecutionException, InterruptedException {
Set<FlowRun.JobEdge> edges = f.getJobsGraph().outgoingEdgesOf(start);
List<Run> runs = new ArrayList<Run>(edges.size());
for (FlowRun.JobEdge edge : edges) {
JobInvocation targetJobEdge = edge.getTarget();
Run run = targetJobEdge.getBuild();
if (run != null) {
runs.add(run);
}
}
return runs;
}
}

2 comments on commit f1f892f

@rodrigc

This comment has been minimized.

Copy link

replied May 19, 2016

@pskumar448 Than you make build-flow-plugin 0.19 a mandatory dependency?
FlowRun from build-flow-plugin is needed. See: https://issues.jenkins-ci.org/browse/JENKINS-34803

@pskumar448

This comment has been minimized.

Copy link
Contributor Author

replied May 19, 2016

@rodrigc
Today me too faced issue after upgrading to newer version. I am updating and immediately will release patch for this

Please sign in to comment.
You can’t perform that action at this time.