diff --git a/changelog.html b/changelog.html index cd39f04388..7b0e56bf94 100644 --- a/changelog.html +++ b/changelog.html @@ -64,6 +64,9 @@ Upcoming changes
  • Fixed "Manage" sub-contextmenu for non-standalone deployments (pull 721) +
  • + Absolute URLs in console output + (issue 16368)
  • Revert ampersand encoding which can cause backwad incompatibility issue (pull 683) diff --git a/core/src/main/java/hudson/Functions.java b/core/src/main/java/hudson/Functions.java index 117bdae2cb..e23502e1ae 100644 --- a/core/src/main/java/hudson/Functions.java +++ b/core/src/main/java/hudson/Functions.java @@ -183,6 +183,8 @@ public class Functions { the same thing as "/abc/def.ghi", but this avoids the stale cache problem when the user upgrades to new Jenkins. Stapler also sets a long future expiration dates for such static resources. + + see https://wiki.jenkins-ci.org/display/JENKINS/Hyperlinks+in+HTML */ context.setVariable("resURL",rootURL+getResourcePath()); context.setVariable("imagesURL",rootURL+getResourcePath()+"/images"); diff --git a/core/src/main/java/hudson/console/HyperlinkNote.java b/core/src/main/java/hudson/console/HyperlinkNote.java index 03883cb45e..7e32acddc0 100644 --- a/core/src/main/java/hudson/console/HyperlinkNote.java +++ b/core/src/main/java/hudson/console/HyperlinkNote.java @@ -26,6 +26,8 @@ package hudson.console; import hudson.Extension; import hudson.MarkupText; import jenkins.model.Jenkins; +import org.kohsuke.stapler.Stapler; +import org.kohsuke.stapler.StaplerRequest; import java.io.IOException; import java.util.logging.Level; @@ -53,8 +55,16 @@ public class HyperlinkNote extends ConsoleNote { @Override public ConsoleAnnotator annotate(Object context, MarkupText text, int charPos) { String url = this.url; - if (url.startsWith("/")) - url = Jenkins.getInstance().getRootUrl()+url.substring(1); + if (url.startsWith("/")) { + StaplerRequest req = Stapler.getCurrentRequest(); + if (req!=null) { + // if we are serving HTTP request, we want to use app relative URL + url = req.getContextPath()+url; + } else { + // otherwise presumably this is rendered for e-mails and other non-HTTP stuff + url = Jenkins.getInstance().getRootUrl()+url.substring(1); + } + } text.addMarkup(charPos, charPos + length, "", ""); return null; } diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 94fa474099..a11dd34845 100755 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -1864,6 +1864,7 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro * @since 1.66 * @see Descriptor#getCheckUrl(String) * @see #getRootUrlFromRequest() + * @see Hyperlinks in HTML */ public String getRootUrl() { String url = JenkinsLocationConfiguration.get().getUrl();