0
0
mirror of https://github.com/go-gitea/gitea.git synced 2025-06-06 20:42:58 +02:00

fine tune

This commit is contained in:
wxiaoguang 2025-05-28 05:35:43 +08:00
parent e843ac5711
commit 31e81156c8
5 changed files with 23 additions and 15 deletions

View File

@ -247,6 +247,7 @@ func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus {
lastStatus = statuses[0] lastStatus = statuses[0]
} else { } else {
// FIXME: another bad case: if the "statuses" slice is empty, the returned value is an invalid CommitStatus, all its fields are empty. // FIXME: another bad case: if the "statuses" slice is empty, the returned value is an invalid CommitStatus, all its fields are empty.
// Frontend code (tmpl&vue) sometimes depend on the empty fields to skip rendering commit status elements (need to double check in the future)
lastStatus = &CommitStatus{} lastStatus = &CommitStatus{}
} }
} }

View File

@ -59,7 +59,11 @@ func UpdateCommitStatusSummary(ctx context.Context, repoID int64, sha string) er
if err != nil { if err != nil {
return err return err
} }
state := CalcCommitStatus(commitStatuses) // it guarantees that commitStatuses is not empty because this function is always called after a commit status is created
if len(commitStatuses) == 0 {
setting.PanicInDevOrTesting("no commit statuses found for repo %d and sha %s", repoID, sha)
}
state := CalcCommitStatus(commitStatuses) // non-empty commitStatuses is guaranteed
// mysql will return 0 when update a record which state hasn't been changed which behaviour is different from other database, // mysql will return 0 when update a record which state hasn't been changed which behaviour is different from other database,
// so we need to use insert in on duplicate // so we need to use insert in on duplicate
if setting.Database.Type.IsMySQL() { if setting.Database.Type.IsMySQL() {

View File

@ -42,7 +42,7 @@ func ToCombinedStatus(ctx context.Context, statuses []*git_model.CommitStatus, r
SHA: statuses[0].SHA, SHA: statuses[0].SHA,
TotalCount: len(statuses), TotalCount: len(statuses),
Repository: repo, Repository: repo,
URL: "", URL: "", // never set or used?
State: api.CommitStatusSuccess, State: api.CommitStatusSuccess,
} }
@ -58,9 +58,13 @@ func ToCombinedStatus(ctx context.Context, statuses []*git_model.CommitStatus, r
// > failure if any of the contexts report as error or failure // > failure if any of the contexts report as error or failure
// > pending if there are no statuses or a context is pending // > pending if there are no statuses or a context is pending
// > success if the latest status for all contexts is success // > success if the latest status for all contexts is success
if retStatus.State.IsError() { switch retStatus.State {
retStatus.State = api.CommitStatusFailure case api.CommitStatusSkipped:
retStatus.State = api.CommitStatusSuccess // all skipped means success
case api.CommitStatusPending, api.CommitStatusSuccess:
// use the current state for pending or success
default:
retStatus.State = api.CommitStatusFailure // otherwise, it is a failure
} }
return retStatus return retStatus
} }

View File

@ -59,16 +59,15 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
} }
if matchedCount == 0 && returnedStatus == structs.CommitStatusSuccess { if matchedCount == 0 && returnedStatus == structs.CommitStatusSuccess {
status := git_model.CalcCommitStatus(commitStatuses) if len(commitStatuses) == 0 {
if status != nil { // "no statuses" should mean "pending"
// FIXME: this check is not right, "status" can never be nil, but its fields can be empty if commitStatuses is empty return structs.CommitStatusPending
// here is just a quick patch to make it overall right.
if status.State == "" || status.State == structs.CommitStatusSkipped {
return structs.CommitStatusSuccess
}
return status.State
} }
return structs.CommitStatusSuccess status := git_model.CalcCommitStatus(commitStatuses)
if status.State == structs.CommitStatusSkipped {
return structs.CommitStatusSuccess // if all statuses are skipped, return success
}
return status.State
} }
return returnedStatus return returnedStatus

View File

@ -22,7 +22,7 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
{ {
commitStatuses: []*git_model.CommitStatus{}, commitStatuses: []*git_model.CommitStatus{},
requiredContexts: []string{}, requiredContexts: []string{},
expected: structs.CommitStatusSuccess, expected: structs.CommitStatusPending,
}, },
{ {
commitStatuses: []*git_model.CommitStatus{ commitStatuses: []*git_model.CommitStatus{