8
8
import com .dabsquared .gitlabjenkins .gitlab .api .model .BuildState ;
9
9
import com .dabsquared .gitlabjenkins .publisher .GitLabCommitStatusPublisher ;
10
10
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 .*;
15
12
import jenkins .model .Jenkins ;
16
13
import org .apache .commons .lang .StringUtils ;
17
14
import org .jenkinsci .plugins .displayurlapi .DisplayURLProvider ;
@@ -24,7 +21,7 @@ public class PendingBuildsHandler {
24
21
25
22
private static final Logger LOGGER = Logger .getLogger (PendingBuildsHandler .class .getName ());
26
23
27
- public void cancelPendingBuilds (Job <?, ?> job , Integer projectId , String branch ) {
24
+ public void cancelPendingBuilds (Job <?, ?> job , Integer projectId , String sourceBranch ) {
28
25
Queue queue = Jenkins .getInstance ().getQueue ();
29
26
for (Queue .Item item : queue .getItems ()) {
30
27
if (!job .getName ().equals (item .task .getName ())) {
@@ -38,11 +35,28 @@ public void cancelPendingBuilds(Job<?, ?> job, Integer projectId, String branch)
38
35
if (!projectId .equals (queueItemCauseData .getSourceProjectId ())) {
39
36
continue ;
40
37
}
41
- if (branch .equals (queueItemCauseData .getBranch ())) {
42
- cancel (item , queue , branch );
38
+ if (sourceBranch .equals (queueItemCauseData .getBranch ())) {
39
+ cancel (item , queue , sourceBranch );
43
40
setCommitStatusCancelledIfNecessary (queueItemCauseData , job );
44
41
}
45
42
}
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 );
46
60
}
47
61
48
62
private GitLabWebHookCause getGitLabWebHookCauseData (Queue .Item item ) {
0 commit comments