Skip to content

Commit 618e2d8

Browse files
Fix required contexts and commit status matching bug (#34815)
Fix #34504 Since one required context can match more than one commit statuses, we should not directly compare the lengths of `requiredCommitStatuses` and `requiredContexts` --------- Signed-off-by: Zettat123 <[email protected]> Co-authored-by: wxiaoguang <[email protected]>
1 parent 485d8f1 commit 618e2d8

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

services/pull/commit_status.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,23 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
3838
}
3939

4040
requiredCommitStatuses := make([]*git_model.CommitStatus, 0, len(commitStatuses))
41+
allRequiredContextsMatched := true
4142
for _, gp := range requiredContextsGlob {
43+
requiredContextMatched := false
4244
for _, commitStatus := range commitStatuses {
4345
if gp.Match(commitStatus.Context) {
4446
requiredCommitStatuses = append(requiredCommitStatuses, commitStatus)
45-
break
47+
requiredContextMatched = true
4648
}
4749
}
50+
allRequiredContextsMatched = allRequiredContextsMatched && requiredContextMatched
4851
}
4952
if len(requiredCommitStatuses) == 0 {
5053
return commitstatus.CommitStatusPending
5154
}
5255

5356
returnedStatus := git_model.CalcCommitStatus(requiredCommitStatuses).State
54-
if len(requiredCommitStatuses) == len(requiredContexts) {
57+
if allRequiredContextsMatched {
5558
return returnedStatus
5659
}
5760

services/pull/commit_status_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
5858
requiredContexts: []string{"Build*", "Build 2t*"},
5959
expected: commitstatus.CommitStatusFailure,
6060
},
61+
{
62+
commitStatuses: []*git_model.CommitStatus{
63+
{Context: "Build 1", State: commitstatus.CommitStatusSuccess},
64+
{Context: "Build 2", State: commitstatus.CommitStatusSuccess},
65+
{Context: "Build 2t", State: commitstatus.CommitStatusFailure},
66+
},
67+
requiredContexts: []string{"Build*"},
68+
expected: commitstatus.CommitStatusFailure,
69+
},
6170
{
6271
commitStatuses: []*git_model.CommitStatus{
6372
{Context: "Build 1", State: commitstatus.CommitStatusSuccess},

0 commit comments

Comments
 (0)