diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index d3a0f718a7f9e..7952ca6fe394c 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -38,20 +38,23 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, } requiredCommitStatuses := make([]*git_model.CommitStatus, 0, len(commitStatuses)) + allRequiredContextsMatched := true for _, gp := range requiredContextsGlob { + requiredContextMatched := false for _, commitStatus := range commitStatuses { if gp.Match(commitStatus.Context) { requiredCommitStatuses = append(requiredCommitStatuses, commitStatus) - break + requiredContextMatched = true } } + allRequiredContextsMatched = allRequiredContextsMatched && requiredContextMatched } if len(requiredCommitStatuses) == 0 { return commitstatus.CommitStatusPending } returnedStatus := git_model.CalcCommitStatus(requiredCommitStatuses).State - if len(requiredCommitStatuses) == len(requiredContexts) { + if allRequiredContextsMatched { return returnedStatus } diff --git a/services/pull/commit_status_test.go b/services/pull/commit_status_test.go index b985a9de8e4c3..a58e788c04406 100644 --- a/services/pull/commit_status_test.go +++ b/services/pull/commit_status_test.go @@ -58,6 +58,15 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) { requiredContexts: []string{"Build*", "Build 2t*"}, expected: commitstatus.CommitStatusFailure, }, + { + commitStatuses: []*git_model.CommitStatus{ + {Context: "Build 1", State: commitstatus.CommitStatusSuccess}, + {Context: "Build 2", State: commitstatus.CommitStatusSuccess}, + {Context: "Build 2t", State: commitstatus.CommitStatusFailure}, + }, + requiredContexts: []string{"Build*"}, + expected: commitstatus.CommitStatusFailure, + }, { commitStatuses: []*git_model.CommitStatus{ {Context: "Build 1", State: commitstatus.CommitStatusSuccess},