@@ -21,46 +21,41 @@ import (
2121
2222// MergeRequiredContextsCommitStatus returns a commit status state for given required contexts
2323func 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