From 721fcfdbf81493c8c05893f87048d458524d684d Mon Sep 17 00:00:00 2001 From: Tom Andrews Date: Tue, 18 Aug 2015 16:37:51 +0100 Subject: [PATCH 1/4] Allow choice of when to rebuild open merge requests Never, on push to source branch, or on push to source or target branch. --- .../gitlabjenkins/GitLabPushTrigger.java | 14 +++++++++++--- .../dabsquared/gitlabjenkins/GitLabWebHook.java | 5 +++-- .../gitlabjenkins/GitLabPushTrigger/config.jelly | 4 ++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index 67b55e0..f6a08fd 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -23,6 +23,8 @@ import hudson.triggers.TriggerDescriptor; import hudson.util.FormValidation; import hudson.util.SequentialExecutionQueue; import hudson.util.XStream2; +import hudson.util.ListBoxModel; +import hudson.util.ListBoxModel.Option; import java.io.File; import java.io.IOException; @@ -73,7 +75,7 @@ public class GitLabPushTrigger extends Trigger> { private static final Logger LOGGER = Logger.getLogger(GitLabPushTrigger.class.getName()); private boolean triggerOnPush = true; private boolean triggerOnMergeRequest = true; - private boolean triggerOpenMergeRequestOnPush = true; + private final String triggerOpenMergeRequestOnPush; private boolean ciSkip = true; private boolean setBuildDescription = true; private boolean addNoteOnMergeRequest = true; @@ -83,7 +85,7 @@ public class GitLabPushTrigger extends Trigger> { private final String excludeBranchesSpec; @DataBoundConstructor - public GitLabPushTrigger(boolean triggerOnPush, boolean triggerOnMergeRequest, boolean triggerOpenMergeRequestOnPush, boolean ciSkip, boolean setBuildDescription, boolean addNoteOnMergeRequest, boolean addVoteOnMergeRequest, boolean allowAllBranches, + public GitLabPushTrigger(boolean triggerOnPush, boolean triggerOnMergeRequest, String triggerOpenMergeRequestOnPush, boolean ciSkip, boolean setBuildDescription, boolean addNoteOnMergeRequest, boolean addVoteOnMergeRequest, boolean allowAllBranches, String includeBranchesSpec, String excludeBranchesSpec) { this.triggerOnPush = triggerOnPush; this.triggerOnMergeRequest = triggerOnMergeRequest; @@ -105,7 +107,7 @@ public class GitLabPushTrigger extends Trigger> { return triggerOnMergeRequest; } - public boolean getTriggerOpenMergeRequestOnPush() { + public String getTriggerOpenMergeRequestOnPush() { return triggerOpenMergeRequestOnPush; } @@ -510,6 +512,12 @@ public class GitLabPushTrigger extends Trigger> { gitlab = new GitLab(); return super.configure(req, formData); } + + public ListBoxModel doFillTriggerOpenMergeRequestOnPushItems(@QueryParameter String triggerOpenMergeRequestOnPush) { + return new ListBoxModel(new Option("Never", "never", triggerOpenMergeRequestOnPush.matches("never") ), + new Option("On push to source branch", "source", triggerOpenMergeRequestOnPush.matches("source") ), + new Option("On push to source or target branch", "both", triggerOpenMergeRequestOnPush.matches("both") )); + } private List getProjectBranches(final Job job) throws IOException, IllegalStateException { if (!(job instanceof AbstractProject)) { diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java index b2ab373..dd8b555 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java @@ -368,7 +368,7 @@ public class GitLabWebHook implements UnprotectedRootAction { trigger.onPost(request); - if (trigger.getTriggerOpenMergeRequestOnPush()) { + if (!trigger.getTriggerOpenMergeRequestOnPush().equals("never")) { // Fetch and build open merge requests with the same source branch buildOpenMergeRequests(trigger, request.getProject_id(), request.getRef()); } @@ -385,7 +385,8 @@ public class GitLabWebHook implements UnprotectedRootAction { List mergeRequests = api.instance().retrieve().getAll(tailUrl, GitlabMergeRequest[].class); for (org.gitlab.api.models.GitlabMergeRequest mr : mergeRequests) { - if (projectRef.endsWith(mr.getSourceBranch()) || projectRef.endsWith(mr.getTargetBranch())) { + if (projectRef.endsWith(mr.getSourceBranch()) || + (trigger.getTriggerOpenMergeRequestOnPush().equals("both") && projectRef.endsWith(mr.getTargetBranch()))) { LOGGER.log(Level.FINE, "Generating new merge trigger from " + mr.toString() + "\n source: " diff --git a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly index 8a675ec..f41a3fa 100644 --- a/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly +++ b/src/main/resources/com/dabsquared/gitlabjenkins/GitLabPushTrigger/config.jelly @@ -6,8 +6,8 @@ - - + + From 6a92c436c189f11e084bdcae03a3296f932b902a Mon Sep 17 00:00:00 2001 From: Tom Andrews Date: Wed, 19 Aug 2015 10:31:11 +0100 Subject: [PATCH 2/4] Don't build on merge trigger if action = update --- .../dabsquared/gitlabjenkins/GitLabMergeRequest.java | 11 ++++++++++- .../com/dabsquared/gitlabjenkins/GitLabWebHook.java | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java index 7c8294e..f46b311 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabMergeRequest.java @@ -95,7 +95,8 @@ public class GitLabMergeRequest extends GitLabRequest { private Branch target; private LastCommit lastCommit; - + + private String action; public ObjectAttributes() { } @@ -240,6 +241,14 @@ public class GitLabMergeRequest extends GitLabRequest { public void setLastCommit(LastCommit lastCommit) { this.lastCommit = lastCommit; } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } } public static class Branch{ diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java index dd8b555..d5cf1c1 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java @@ -440,6 +440,10 @@ public class GitLabWebHook implements UnprotectedRootAction { LOGGER.log(Level.INFO, "Accepted Merge Request, no build started"); return; } + if(request.getObjectAttribute().getAction().equals("update")) { + LOGGER.log(Level.INFO, "Existing Merge Request, build will be trigged by buildOpenMergeRequests instead"); + return; + } if(request.getObjectAttribute().getLastCommit()!=null) { AbstractBuild mergeBuild = getBuildBySHA1(project, request.getObjectAttribute().getLastCommit().getId(), true); if(mergeBuild!=null){ From 42283655f681d11efff3aede81deda56fe2aad94 Mon Sep 17 00:00:00 2001 From: Tom Andrews Date: Wed, 19 Aug 2015 12:22:39 +0100 Subject: [PATCH 3/4] Fix NPE getDesc.project returns null --- .../java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java index f6a08fd..57052ab 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabPushTrigger.java @@ -270,7 +270,7 @@ public class GitLabPushTrigger extends Trigger> { values.put("gitlabActionType", new StringParameterValue("gitlabActionType", "MERGE")); - LOGGER.log(Level.INFO, "Trying to get name and URL for job: {0} using project {1}", new String[]{job.getName(), getDesc().project.getName()}); + LOGGER.log(Level.INFO, "Trying to get name and URL for job: {0}", job.getName()); String sourceRepoName = getDesc().getSourceRepoNameDefault(job); String sourceRepoURL = getDesc().getSourceRepoURLDefault(job).toString(); From 7f8f9f861ee3e296d5b5e98cca4389ee3bffbbad Mon Sep 17 00:00:00 2001 From: Tom Andrews Date: Wed, 19 Aug 2015 12:28:31 +0100 Subject: [PATCH 4/4] Build all the affected merge requests. It was returning after triggering one --- src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java b/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java index d5cf1c1..3fe095b 100644 --- a/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java +++ b/src/main/java/com/dabsquared/gitlabjenkins/GitLabWebHook.java @@ -420,7 +420,6 @@ public class GitLabWebHook implements UnprotectedRootAction { } finally { SecurityContextHolder.getContext().setAuthentication(old); } - return; } } } catch (Exception e) {