Skip to content

Commit

Permalink
Issue-1140 - cancel running jobs on merge request update when source …
Browse files Browse the repository at this point in the history
…branch is same
  • Loading branch information
remigiuszd committed Mar 27, 2022
1 parent 3739d09 commit 1ca69d6
Showing 1 changed file with 21 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
import com.dabsquared.gitlabjenkins.gitlab.api.model.BuildState;
import com.dabsquared.gitlabjenkins.publisher.GitLabCommitStatusPublisher;
import com.dabsquared.gitlabjenkins.util.LoggerUtil;
import hudson.model.AbstractProject;
import hudson.model.Cause;
import hudson.model.Job;
import hudson.model.Queue;
import hudson.model.*;
import jenkins.model.Jenkins;
import org.apache.commons.lang.StringUtils;
import org.jenkinsci.plugins.displayurlapi.DisplayURLProvider;
Expand All @@ -24,7 +21,7 @@ public class PendingBuildsHandler {

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

public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String branch) {
public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String sourceBranch) {
Queue queue = Jenkins.getInstance().getQueue();
for (Queue.Item item : queue.getItems()) {
if (!job.getName().equals(item.task.getName())) {
Expand All @@ -38,11 +35,28 @@ public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String branch)
if (!projectId.equals(queueItemCauseData.getSourceProjectId())) {
continue;
}
if (branch.equals(queueItemCauseData.getBranch())) {
cancel(item, queue, branch);
if (sourceBranch.equals(queueItemCauseData.getBranch())) {
cancel(item, queue, sourceBranch);
setCommitStatusCancelledIfNecessary(queueItemCauseData, job);
}
}
stopRunningBuilds(job, sourceBranch);
}

private void stopRunningBuilds(Job<?, ?> job, String sourceBranch) {
for (Run<?, ?> build : job.getBuilds()) {
if (build.isBuilding() && runsCausedByMergeToSourceBranch(build, sourceBranch)) {
Executor executor = build.getExecutor();
if (executor != null) executor.doStop();
GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class);
if (cause != null) setCommitStatusCancelledIfNecessary(cause.getData(), job);
}
}
}

private boolean runsCausedByMergeToSourceBranch(Run<?, ?> build, String sourceBranch) {
GitLabWebHookCause cause = build.getCause(GitLabWebHookCause.class);
return cause != null && cause.getData().getSourceBranch().equals(sourceBranch);
}

private GitLabWebHookCause getGitLabWebHookCauseData(Queue.Item item) {
Expand Down

0 comments on commit 1ca69d6

Please sign in to comment.