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());
+ }
+ }
}
}
}