From e937b099cb49e7458159980adc4b59d1f98b057c Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Sat, 24 May 2014 00:51:26 +0200 Subject: [PATCH] [FIX JENKINS-18048] Fix link of SCMTriggerCause from UpstreamCause - UpstreamCause now tries to initialize upstream causes with the correct build in onLoad - SCMTriggerCause stores build reference and uses its URL to build absolute link to changelog --- core/src/main/java/hudson/model/Cause.java | 20 +++++++++++++++++++ .../main/java/hudson/triggers/SCMTrigger.java | 17 ++++++++++++++++ .../SCMTriggerCause/description.jelly | 3 ++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/model/Cause.java b/core/src/main/java/hudson/model/Cause.java index b296e40b75a2..a7b87675f898 100644 --- a/core/src/main/java/hudson/model/Cause.java +++ b/core/src/main/java/hudson/model/Cause.java @@ -157,6 +157,26 @@ private UpstreamCause(String upstreamProject, int upstreamBuild, String upstream this.upstreamCauses = upstreamCauses; } + @Override + public void onLoad(@Nonnull AbstractBuild build) { + Item i = Jenkins.getInstance().getItemByFullName(this.upstreamProject); + if (i == null || !(i instanceof AbstractProject)) { + // cannot initialize upstream causes + return; + } + + AbstractProject j = (AbstractProject)i; + AbstractBuild 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 8ff7e5d4a468..bf258c602a45 100644 --- a/core/src/main/java/hudson/triggers/SCMTrigger.java +++ b/core/src/main/java/hudson/triggers/SCMTrigger.java @@ -46,6 +46,8 @@ import hudson.util.SequentialExecutionQueue; 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; @@ -72,6 +74,8 @@ import static java.util.logging.Level.*; import jenkins.model.RunAction2; +import javax.annotation.Nonnull; + /** * {@link Trigger} that checks for SCM updates periodically. * @@ -536,6 +540,8 @@ public static class SCMTriggerCause extends Cause { */ private String pollingLog; + private transient AbstractBuild build; + public SCMTriggerCause(File logFile) throws IOException { // TODO: charset of this log file? this(FileUtils.readFileToString(logFile)); @@ -553,8 +559,14 @@ public SCMTriggerCause() { this(""); } + @Override + public void onLoad(@Nonnull AbstractBuild build) { + this.build = build; + } + @Override public void onAddedTo(AbstractBuild build) { + this.build = build; try { BuildAction a = new BuildAction(build); FileUtils.writeStringToFile(a.getPollingLogFile(),pollingLog); @@ -570,6 +582,11 @@ public String getShortDescription() { return Messages.SCMTrigger_SCMTriggerCause_ShortDescription(); } + @Restricted(DoNotUse.class) + public AbstractBuild getBuild() { + return this.build; + } + @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 f8a53717a679..56aa03c6ac67 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}