diff --git a/pom.xml b/pom.xml index d723163f..9974e8f3 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ org.jenkins-ci.plugins scm-api - 1.0 + 1.1-SNAPSHOT org.jenkins-ci.plugins diff --git a/src/main/java/jenkins/branch/Branch.java b/src/main/java/jenkins/branch/Branch.java index b356a8ad..2b8283c5 100644 --- a/src/main/java/jenkins/branch/Branch.java +++ b/src/main/java/jenkins/branch/Branch.java @@ -30,11 +30,14 @@ import java.util.concurrent.CopyOnWriteArrayList; import jenkins.scm.api.SCMHead; import jenkins.scm.impl.NullSCMSource; +import org.kohsuke.stapler.export.Exported; +import org.kohsuke.stapler.export.ExportedBean; /** * A source code branch. * Not to be subclassed outside this plugin. */ +@ExportedBean public class Branch { /** @@ -104,6 +107,7 @@ public String getEncodedName() { * * @return the {@link SCMHead of the branch} */ + @Exported public SCMHead getHead() { return head; } @@ -113,6 +117,7 @@ public SCMHead getHead() { * * @return the {@link SCM} for the branch. */ + @Exported public SCM getScm() { return scm; } diff --git a/src/main/java/jenkins/branch/BranchNameContributor.java b/src/main/java/jenkins/branch/BranchNameContributor.java index 06b9291e..55dde53f 100644 --- a/src/main/java/jenkins/branch/BranchNameContributor.java +++ b/src/main/java/jenkins/branch/BranchNameContributor.java @@ -31,9 +31,13 @@ import hudson.model.Job; import hudson.model.TaskListener; import java.io.IOException; +import java.net.URL; +import jenkins.scm.api.SCMHead; +import jenkins.scm.api.actions.ChangeRequestAction; /** * Defines the environment variable {@code BRANCH_NAME} for multibranch builds. + * Also defines {@code CHANGE_*} variables when {@link ChangeRequestAction} is present. */ @Extension public class BranchNameContributor extends EnvironmentContributor { @@ -46,9 +50,26 @@ public void buildEnvironmentFor(Job j, EnvVars envs, TaskListener listener) thro if (parent instanceof MultiBranchProject) { BranchProjectFactory projectFactory = ((MultiBranchProject) parent).getProjectFactory(); if (projectFactory.isProject(j)) { + SCMHead head = projectFactory.getBranch(j).getHead(); // Note: not using Branch.name, since in the future that could be something different // than SCMHead.name, which is what we really want here. - envs.put("BRANCH_NAME", projectFactory.getBranch(j).getHead().getName()); + envs.put("BRANCH_NAME", head.getName()); + ChangeRequestAction cr = head.getAction(ChangeRequestAction.class); + if (cr != null) { + envs.putIfNotNull("CHANGE_ID", cr.getId()); + URL u = cr.getURL(); + if (u != null) { + envs.put("CHANGE_URL", u.toString()); + } + envs.putIfNotNull("CHANGE_TITLE", cr.getTitle()); + envs.putIfNotNull("CHANGE_AUTHOR", cr.getAuthor()); + envs.putIfNotNull("CHANGE_AUTHOR_DISPLAY_NAME", cr.getAuthorDisplayName()); + envs.putIfNotNull("CHANGE_AUTHOR_EMAIL", cr.getAuthorEmail()); + SCMHead target = cr.getTarget(); + if (target != null) { + envs.put("CHANGE_TARGET", target.getName()); + } + } } } }