@@ -21,46 +21,41 @@ import (
21
21
22
22
// MergeRequiredContextsCommitStatus returns a commit status state for given required contexts
23
23
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
26
24
returnedStatus := structs .CommitStatusSuccess
27
25
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
36
36
}
37
+ }
37
38
39
+ for _ , gp := range requiredContextsGlob {
40
+ var targetStatus structs.CommitStatusState
38
41
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
46
45
}
46
+ }
47
47
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
50
52
}
53
+ break
51
54
}
52
- }
53
55
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
62
58
}
63
- return structs .CommitStatusSuccess
64
59
}
65
60
66
61
return returnedStatus
0 commit comments