diff --git a/core/src/main/java/hudson/model/Cause.java b/core/src/main/java/hudson/model/Cause.java index e07b4107c70bd856577cc297d41c318df8a6a57f..e1523db771f3e1ae3b82e28c4dd8c109029deec8 100644 --- a/core/src/main/java/hudson/model/Cause.java +++ b/core/src/main/java/hudson/model/Cause.java @@ -177,6 +177,26 @@ public abstract class Cause { this.upstreamCauses = upstreamCauses; } + @Override + public void onLoad(@Nonnull Run run) { + Item i = Jenkins.getInstance().getItemByFullName(this.upstreamProject); + if (i == null || !(i instanceof Job)) { + // cannot initialize upstream causes + return; + } + + Job j = (Job)i; + Run r = j.getBuildByNumber(this.getUpstreamBuild()); + if (r == null) { + // build doesn't exist anymore + return; + } + + for (Cause c : this.upstreamCauses) { + c.onLoad(r); + } + } + /** * @since 1.515 */ diff --git a/core/src/main/java/hudson/triggers/SCMTrigger.java b/core/src/main/java/hudson/triggers/SCMTrigger.java index 3836b4735d7eb6f399fc3c0b71992b2a36a9bb1d..63210a206341a4dc89984708a12325754edb874b 100644 --- a/core/src/main/java/hudson/triggers/SCMTrigger.java +++ b/core/src/main/java/hudson/triggers/SCMTrigger.java @@ -44,6 +44,13 @@ import hudson.util.NamingThreadFactory; import hudson.util.SequentialExecutionQueue; import hudson.util.StreamTaskListener; import hudson.util.TimeUnit2; +import org.apache.commons.io.FileUtils; +import org.apache.commons.jelly.XMLOutput; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.DoNotUse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.DataBoundConstructor; + import java.io.File; import java.io.IOException; import java.io.PrintStream; @@ -66,15 +73,15 @@ import jenkins.model.Jenkins; import jenkins.model.RunAction2; import jenkins.triggers.SCMTriggerItem; import net.sf.json.JSONObject; -import org.apache.commons.io.FileUtils; -import org.apache.commons.jelly.XMLOutput; -import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; -import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.QueryParameter; -import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; +import static java.util.logging.Level.*; +import jenkins.model.RunAction2; + +import javax.annotation.Nonnull; + /** * {@link Trigger} that checks for SCM updates periodically. * @@ -584,6 +591,8 @@ public class SCMTrigger extends Trigger { */ private String pollingLog; + private transient Run run; + public SCMTriggerCause(File logFile) throws IOException { // TODO: charset of this log file? this(FileUtils.readFileToString(logFile)); @@ -601,8 +610,14 @@ public class SCMTrigger extends Trigger { this(""); } + @Override + public void onLoad(Run run) { + this.run = run; + } + @Override public void onAddedTo(Run build) { + this.run = build; try { BuildAction a = new BuildAction(build); FileUtils.writeStringToFile(a.getPollingLogFile(),pollingLog); @@ -618,6 +633,11 @@ public class SCMTrigger extends Trigger { return Messages.SCMTrigger_SCMTriggerCause_ShortDescription(); } + @Restricted(DoNotUse.class) + public Run getRun() { + return this.run; + } + @Override public boolean equals(Object o) { return o instanceof SCMTriggerCause; diff --git a/core/src/main/resources/hudson/triggers/SCMTrigger/SCMTriggerCause/description.jelly b/core/src/main/resources/hudson/triggers/SCMTrigger/SCMTriggerCause/description.jelly index f8a53717a679c10291b3155047bc461c58efcc31..c377b51e16d7328918916fb15a9fb748655f6db0 100644 --- a/core/src/main/resources/hudson/triggers/SCMTrigger/SCMTriggerCause/description.jelly +++ b/core/src/main/resources/hudson/triggers/SCMTrigger/SCMTriggerCause/description.jelly @@ -23,5 +23,6 @@ THE SOFTWARE. --> - ${it.shortDescription} + + ${it.shortDescription}