mirror of
https://github.com/go-gitea/gitea.git
synced 2025-06-26 16:23:43 +00:00
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 <zettat123@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
parent
485d8f1121
commit
618e2d8106
@ -38,20 +38,23 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
|
|||||||
}
|
}
|
||||||
|
|
||||||
requiredCommitStatuses := make([]*git_model.CommitStatus, 0, len(commitStatuses))
|
requiredCommitStatuses := make([]*git_model.CommitStatus, 0, len(commitStatuses))
|
||||||
|
allRequiredContextsMatched := true
|
||||||
for _, gp := range requiredContextsGlob {
|
for _, gp := range requiredContextsGlob {
|
||||||
|
requiredContextMatched := false
|
||||||
for _, commitStatus := range commitStatuses {
|
for _, commitStatus := range commitStatuses {
|
||||||
if gp.Match(commitStatus.Context) {
|
if gp.Match(commitStatus.Context) {
|
||||||
requiredCommitStatuses = append(requiredCommitStatuses, commitStatus)
|
requiredCommitStatuses = append(requiredCommitStatuses, commitStatus)
|
||||||
break
|
requiredContextMatched = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
allRequiredContextsMatched = allRequiredContextsMatched && requiredContextMatched
|
||||||
}
|
}
|
||||||
if len(requiredCommitStatuses) == 0 {
|
if len(requiredCommitStatuses) == 0 {
|
||||||
return commitstatus.CommitStatusPending
|
return commitstatus.CommitStatusPending
|
||||||
}
|
}
|
||||||
|
|
||||||
returnedStatus := git_model.CalcCommitStatus(requiredCommitStatuses).State
|
returnedStatus := git_model.CalcCommitStatus(requiredCommitStatuses).State
|
||||||
if len(requiredCommitStatuses) == len(requiredContexts) {
|
if allRequiredContextsMatched {
|
||||||
return returnedStatus
|
return returnedStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,15 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
|
|||||||
requiredContexts: []string{"Build*", "Build 2t*"},
|
requiredContexts: []string{"Build*", "Build 2t*"},
|
||||||
expected: commitstatus.CommitStatusFailure,
|
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{
|
commitStatuses: []*git_model.CommitStatus{
|
||||||
{Context: "Build 1", State: commitstatus.CommitStatusSuccess},
|
{Context: "Build 1", State: commitstatus.CommitStatusSuccess},
|
||||||
|
Loading…
Reference in New Issue
Block a user