Skip to content

Commit c2c9cd8

Browse files
committed
Fixing the issue when status check per rule matches multiple actions. (#29628)
1 parent 90a3f2d commit c2c9cd8

File tree

1 file changed

+24
-29
lines changed

1 file changed

+24
-29
lines changed

services/pull/commit_status.go

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -21,46 +21,41 @@ import (
2121

2222
// MergeRequiredContextsCommitStatus returns a commit status state for given required contexts
2323
func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, requiredContexts []string) structs.CommitStatusState {
24-
// matchedCount is the number of `CommitStatus.Context` that match any context of `requiredContexts`
25-
matchedCount := 0
2624
returnedStatus := structs.CommitStatusSuccess
2725

28-
if len(requiredContexts) > 0 {
29-
requiredContextsGlob := make(map[string]glob.Glob, len(requiredContexts))
30-
for _, ctx := range requiredContexts {
31-
if gp, err := glob.Compile(ctx); err != nil {
32-
log.Error("glob.Compile %s failed. Error: %v", ctx, err)
33-
} else {
34-
requiredContextsGlob[ctx] = gp
35-
}
26+
if len(requiredContexts) <= 0 {
27+
return returnedStatus
28+
}
29+
30+
requiredContextsGlob := make(map[string]glob.Glob, len(requiredContexts))
31+
for _, ctx := range requiredContexts {
32+
if gp, err := glob.Compile(ctx); err != nil {
33+
log.Error("glob.Compile %s failed. Error: %v", ctx, err)
34+
} else {
35+
requiredContextsGlob[ctx] = gp
3636
}
37+
}
3738

39+
for _, gp := range requiredContextsGlob {
40+
var targetStatus structs.CommitStatusState
3841
for _, commitStatus := range commitStatuses {
39-
var targetStatus structs.CommitStatusState
40-
for _, gp := range requiredContextsGlob {
41-
if gp.Match(commitStatus.Context) {
42-
targetStatus = commitStatus.State
43-
matchedCount++
44-
break
45-
}
42+
if gp.Match(commitStatus.Context) {
43+
targetStatus = commitStatus.State
44+
break
4645
}
46+
}
4747

48-
if targetStatus != "" && targetStatus.NoBetterThan(returnedStatus) {
49-
returnedStatus = targetStatus
48+
// If required rule not match any action, then it is pending
49+
if targetStatus == "" {
50+
if structs.CommitStatusPending.NoBetterThan(returnedStatus) {
51+
returnedStatus = structs.CommitStatusPending
5052
}
53+
break
5154
}
52-
}
5355

54-
if matchedCount != len(requiredContexts) {
55-
return structs.CommitStatusPending
56-
}
57-
58-
if matchedCount == 0 {
59-
status := git_model.CalcCommitStatus(commitStatuses)
60-
if status != nil {
61-
return status.State
56+
if targetStatus != "" && targetStatus.NoBetterThan(returnedStatus) {
57+
returnedStatus = targetStatus
6258
}
63-
return structs.CommitStatusSuccess
6459
}
6560

6661
return returnedStatus

0 commit comments

Comments
 (0)