提交 f8dd5842 编写于 作者: A Andrew Bayer

[FIXED JENKINS-45909] ReverseBuildTrigger.upstreamProjects should be null safe

上级 7550d796
...@@ -170,7 +170,7 @@ public final class ReverseBuildTrigger extends Trigger<Job> implements Dependenc ...@@ -170,7 +170,7 @@ public final class ReverseBuildTrigger extends Trigger<Job> implements Dependenc
} }
@Override public void buildDependencyGraph(final AbstractProject downstream, DependencyGraph graph) { @Override public void buildDependencyGraph(final AbstractProject downstream, DependencyGraph graph) {
for (AbstractProject upstream : Items.fromNameList(downstream.getParent(), upstreamProjects, AbstractProject.class)) { for (AbstractProject upstream : Items.fromNameList(downstream.getParent(), Util.fixNull(upstreamProjects), AbstractProject.class)) {
graph.addDependency(new DependencyGraph.Dependency(upstream, downstream) { graph.addDependency(new DependencyGraph.Dependency(upstream, downstream) {
@Override public boolean shouldTriggerBuild(AbstractBuild upstreamBuild, TaskListener listener, List<Action> actions) { @Override public boolean shouldTriggerBuild(AbstractBuild upstreamBuild, TaskListener listener, List<Action> actions) {
return shouldTrigger(upstreamBuild, listener); return shouldTrigger(upstreamBuild, listener);
...@@ -253,7 +253,7 @@ public final class ReverseBuildTrigger extends Trigger<Job> implements Dependenc ...@@ -253,7 +253,7 @@ public final class ReverseBuildTrigger extends Trigger<Job> implements Dependenc
continue; continue;
} }
List<Job> upstreams = List<Job> upstreams =
Items.fromNameList(downstream.getParent(), trigger.upstreamProjects, Job.class); Items.fromNameList(downstream.getParent(), Util.fixNull(trigger.upstreamProjects), Job.class);
LOGGER.log(Level.FINE, "from {0} see upstreams {1}", new Object[]{downstream, upstreams}); LOGGER.log(Level.FINE, "from {0} see upstreams {1}", new Object[]{downstream, upstreams});
for (Job upstream : upstreams) { for (Job upstream : upstreams) {
if (upstream instanceof AbstractProject && downstream instanceof AbstractProject) { if (upstream instanceof AbstractProject && downstream instanceof AbstractProject) {
...@@ -310,8 +310,8 @@ public final class ReverseBuildTrigger extends Trigger<Job> implements Dependenc ...@@ -310,8 +310,8 @@ public final class ReverseBuildTrigger extends Trigger<Job> implements Dependenc
ReverseBuildTrigger t = ParameterizedJobMixIn.getTrigger(p, ReverseBuildTrigger.class); ReverseBuildTrigger t = ParameterizedJobMixIn.getTrigger(p, ReverseBuildTrigger.class);
if (t != null) { if (t != null) {
String revised = String revised =
Items.computeRelativeNamesAfterRenaming(oldFullName, newFullName, t.upstreamProjects, Items.computeRelativeNamesAfterRenaming(oldFullName, newFullName,
p.getParent()); Util.fixNull(t.upstreamProjects), p.getParent());
if (!revised.equals(t.upstreamProjects)) { if (!revised.equals(t.upstreamProjects)) {
t.upstreamProjects = revised; t.upstreamProjects = revised;
try { try {
......
...@@ -209,4 +209,19 @@ public class ReverseBuildTriggerTest { ...@@ -209,4 +209,19 @@ public class ReverseBuildTriggerTest {
assertThat("Build should be not triggered", downstreamJob1.getBuilds(), hasSize(0)); assertThat("Build should be not triggered", downstreamJob1.getBuilds(), hasSize(0));
assertThat("Build should be triggered", downstreamJob2.getBuilds(), not(hasSize(0))); assertThat("Build should be triggered", downstreamJob2.getBuilds(), not(hasSize(0)));
} }
@Issue("JENKINS-45909")
@Test
public void nullUpstreamProjectsNoNPE() throws Exception {
//job with trigger.upstreamProjects == null
final FreeStyleProject downstreamJob1 = r.createFreeStyleProject("downstream1");
ReverseBuildTrigger trigger = new ReverseBuildTrigger(null);
downstreamJob1.addTrigger(trigger);
downstreamJob1.save();
r.configRoundtrip(downstreamJob1);
// The reported issue was with Pipeline jobs, which calculate their dependency graphs via
// ReverseBuildTrigger.RunListenerImpl, so an additional test may be needed downstream.
trigger.buildDependencyGraph(downstreamJob1, Jenkins.getInstance().getDependencyGraph());
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册