Skip to content

Commit 1ca69d6

Browse files
author
remigiuszd
committed
Issue-1140 - cancel running jobs on merge request update when source branch is same
1 parent 3739d09 commit 1ca69d6

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

src/main/java/com/dabsquared/gitlabjenkins/trigger/handler/PendingBuildsHandler.java

+21-7
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
import com.dabsquared.gitlabjenkins.gitlab.api.model.BuildState;
99
import com.dabsquared.gitlabjenkins.publisher.GitLabCommitStatusPublisher;
1010
import com.dabsquared.gitlabjenkins.util.LoggerUtil;
11-
import hudson.model.AbstractProject;
12-
import hudson.model.Cause;
13-
import hudson.model.Job;
14-
import hudson.model.Queue;
11+
import hudson.model.*;
1512
import jenkins.model.Jenkins;
1613
import org.apache.commons.lang.StringUtils;
1714
import org.jenkinsci.plugins.displayurlapi.DisplayURLProvider;
@@ -24,7 +21,7 @@ public class PendingBuildsHandler {
2421

2522
private static final Logger LOGGER = Logger.getLogger(PendingBuildsHandler.class.getName());
2623

27-
public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String branch) {
24+
public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String sourceBranch) {
2825
Queue queue = Jenkins.getInstance().getQueue();
2926
for (Queue.Item item : queue.getItems()) {
3027
if (!job.getName().equals(item.task.getName())) {
@@ -38,11 +35,28 @@ public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String branch)
3835
if (!projectId.equals(queueItemCauseData.getSourceProjectId())) {
3936
continue;
4037
}
41-
if (branch.equals(queueItemCauseData.getBranch())) {
42-
cancel(item, queue, branch);
38+
if (sourceBranch.equals(queueItemCauseData.getBranch())) {
39+
cancel(item, queue, sourceBranch);
4340
setCommitStatusCancelledIfNecessary(queueItemCauseData, job);
4441
}
4542
}
43+
stopRunningBuilds(job, sourceBranch);
44+
}
45+
46+
private void stopRunningBuilds(Job<?, ?> job, String sourceBranch) {
47+
for (Run<?, ?> build : job.getBuilds()) {
48+
if (build.isBuilding() && runsCausedByMergeToSourceBranch(build, sourceBranch)) {
49+
Executor executor = build.getExecutor();
50+
if (executor != null) executor.doStop();
51+
GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class);
52+
if (cause != null) setCommitStatusCancelledIfNecessary(cause.getData(), job);
53+
}
54+
}
55+
}
56+
57+
private boolean runsCausedByMergeToSourceBranch(Run<?, ?> build, String sourceBranch) {
58+
GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class);
59+
return cause != null && cause.getData().getSourceBranch().equals(sourceBranch);
4660
}
4761

4862
private GitLabWebHookCause getGitLabWebHookCauseData(Queue.Item item) {

0 commit comments

Comments
 (0)