0
0
mirror of https://github.com/go-gitea/gitea.git synced 2026-02-07 05:54:18 +01:00

Some improvements

This commit is contained in:
Lunny Xiao 2025-05-25 12:39:38 -07:00
parent 43ed136609
commit 083e0ba97a
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
10 changed files with 40 additions and 38 deletions

View File

@ -89,27 +89,27 @@ func GetLatestCombinedStatusForRepoAndSHAs(ctx context.Context, repoSHAs []RepoS
return summaries, nil
}
func UpdateCommitStatusSummary(ctx context.Context, repoID int64, sha string) error {
func InsertOrUpdateCombinedStatus(ctx context.Context, repoID int64, sha string) error {
commitStatuses, _, err := GetLatestCommitStatus(ctx, repoID, sha, db.ListOptionsAll)
if err != nil {
return err
}
summary := CalcCombinedStatus(commitStatuses)
combinedStatus := CalcCombinedStatus(commitStatuses)
// 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
if setting.Database.Type.IsMySQL() {
_, err := db.GetEngine(ctx).Exec("INSERT INTO commit_status_summary (repo_id,sha,state,target_url) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE state=?",
repoID, sha, summary.State, summary.TargetURL, summary.State)
repoID, sha, combinedStatus.State, combinedStatus.TargetURL, combinedStatus.State)
return err
}
if cnt, err := db.GetEngine(ctx).Where("repo_id=? AND sha=?", repoID, sha).
Cols("state, target_url").
Update(summary); err != nil {
Update(combinedStatus); err != nil {
return err
} else if cnt == 0 {
_, err = db.GetEngine(ctx).Insert(summary)
_, err = db.GetEngine(ctx).Insert(combinedStatus)
return err
}
return nil

View File

@ -232,7 +232,7 @@ func CalcCombinedStatusState(statuses []*CommitStatus) commitstatus.CombinedStat
for _, status := range statuses {
states = append(states, status.State)
}
return states.Merge()
return states.CalcAsCombinedStatusState()
}
// CalcCombinedStatus returns combined status struct, the commit statuses should order by id desc
@ -252,7 +252,7 @@ func CalcCombinedStatus(statuses []*CommitStatus) *CombinedStatus {
return &CombinedStatus{
RepoID: statuses[0].RepoID,
SHA: statuses[0].SHA,
State: states.Merge(),
State: states.CalcAsCombinedStatusState(),
TargetURL: targetURL,
}
}

View File

@ -78,7 +78,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusPending,
},
},
expected: commitstatus.CombinedStatusStatePending,
expected: commitstatus.CombinedStatusPending,
},
{
statuses: []*git_model.CommitStatus{
@ -89,7 +89,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusPending,
},
},
expected: commitstatus.CombinedStatusStatePending,
expected: commitstatus.CombinedStatusPending,
},
{
statuses: []*git_model.CommitStatus{
@ -103,7 +103,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusSuccess,
},
},
expected: commitstatus.CombinedStatusStatePending,
expected: commitstatus.CombinedStatusPending,
},
{
statuses: []*git_model.CommitStatus{
@ -117,7 +117,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusSuccess,
},
},
expected: commitstatus.CombinedStatusStateFailure,
expected: commitstatus.CombinedStatusFailure,
},
{
statuses: []*git_model.CommitStatus{
@ -131,7 +131,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusSuccess,
},
},
expected: commitstatus.CombinedStatusStatePending,
expected: commitstatus.CombinedStatusPending,
},
{
statuses: []*git_model.CommitStatus{
@ -145,7 +145,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusSuccess,
},
},
expected: commitstatus.CombinedStatusStateSuccess,
expected: commitstatus.CombinedStatusSuccess,
},
{
statuses: []*git_model.CommitStatus{
@ -159,7 +159,7 @@ func Test_CalcCommitStatus(t *testing.T) {
State: commitstatus.CommitStatusWarning,
},
},
expected: commitstatus.CombinedStatusStateFailure,
expected: commitstatus.CombinedStatusFailure,
},
}

View File

@ -7,12 +7,12 @@ package commitstatus
type CombinedStatusState string
const (
// CombinedStatusStatePending is for when the CombinedStatus is Pending
CombinedStatusStatePending CombinedStatusState = "pending"
// CombinedStatusStateSuccess is for when the CombinedStatus is Success
CombinedStatusStateSuccess CombinedStatusState = "success"
// CombinedStatusStateFailure is for when the CombinedStatus is Failure
CombinedStatusStateFailure CombinedStatusState = "failure"
// CombinedStatusPending is for when the CombinedStatus is Pending
CombinedStatusPending CombinedStatusState = "pending"
// CombinedStatusSuccess is for when the CombinedStatus is Success
CombinedStatusSuccess CombinedStatusState = "success"
// CombinedStatusFailure is for when the CombinedStatus is Failure
CombinedStatusFailure CombinedStatusState = "failure"
)
func (cs CombinedStatusState) String() string {
@ -21,15 +21,15 @@ func (cs CombinedStatusState) String() string {
// IsPending represents if commit status state is pending
func (cs CombinedStatusState) IsPending() bool {
return cs == CombinedStatusStatePending
return cs == CombinedStatusPending
}
// IsSuccess represents if commit status state is success
func (cs CombinedStatusState) IsSuccess() bool {
return cs == CombinedStatusStateSuccess
return cs == CombinedStatusSuccess
}
// IsFailure represents if commit status state is failure
func (cs CombinedStatusState) IsFailure() bool {
return cs == CombinedStatusStateFailure
return cs == CombinedStatusFailure
}

View File

@ -57,19 +57,19 @@ type CommitStatusStates []CommitStatusState //nolint
// > pending if there are no statuses or a context is pending
// > success if the latest status for all contexts is success
func (css CommitStatusStates) Merge() CombinedStatusState {
func (css CommitStatusStates) CalcAsCombinedStatusState() CombinedStatusState {
successCnt := 0
for _, state := range css {
switch {
case state.IsError() || state.IsFailure():
return CombinedStatusStateFailure
return CombinedStatusFailure
case state.IsPending():
case state.IsSuccess() || state.IsWarning():
successCnt++
}
}
if successCnt > 0 && successCnt == len(css) {
return CombinedStatusStateSuccess
return CombinedStatusSuccess
}
return CombinedStatusStatePending
return CombinedStatusPending
}

View File

@ -75,14 +75,14 @@ func Branches(ctx *context.Context) {
}
}
commitStatus := make(map[string]*git_model.CombinedStatus, len(commitStatuses))
combinedStatuses := make(map[string]*git_model.CombinedStatus, len(commitStatuses))
for commitID, cs := range commitStatuses {
commitStatus[commitID] = git_model.CalcCombinedStatus(cs)
combinedStatuses[commitID] = git_model.CalcCombinedStatus(cs)
}
ctx.Data["Keyword"] = kw
ctx.Data["Branches"] = branches
ctx.Data["CommitStatus"] = commitStatus
ctx.Data["CommitStatus"] = combinedStatuses
ctx.Data["CommitStatuses"] = commitStatuses
ctx.Data["DefaultBranchBranch"] = defaultBranch
pager := context.NewPagination(int(branchesCount), pageSize, page, 5)

View File

@ -5,6 +5,7 @@ package convert
import (
"context"
"net/url"
git_model "code.gitea.io/gitea/models/git"
user_model "code.gitea.io/gitea/models/user"
@ -44,6 +45,7 @@ func ToCombinedStatus(ctx context.Context, statuses []*git_model.CommitStatus, r
SHA: combinedStatus.SHA,
TotalCount: len(statuses),
Repository: repo,
URL: combinedStatus.TargetURL,
CommitURL: repo.URL + "/commits/" + url.PathEscape(combinedStatus.SHA),
URL: repo.URL + "/commits/" + url.PathEscape(combinedStatus.SHA) + "/status",
}
}

View File

@ -51,7 +51,7 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
func IsCommitStatusContextSuccess(commitStatuses []*git_model.CommitStatus, requiredContexts []string) bool {
// If no specific context is required, require that last commit status is a success
if len(requiredContexts) == 0 {
return git_model.CalcCombinedStatusState(commitStatuses) == commitstatus.CombinedStatusStateSuccess
return git_model.CalcCombinedStatusState(commitStatuses) == commitstatus.CombinedStatusSuccess
}
for _, ctx := range requiredContexts {

View File

@ -50,11 +50,11 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
}
testCasesExpected := []commitstatus.CombinedStatusState{
commitstatus.CombinedStatusStateSuccess,
commitstatus.CombinedStatusStatePending,
commitstatus.CombinedStatusStateFailure,
commitstatus.CombinedStatusStatePending,
commitstatus.CombinedStatusStateSuccess,
commitstatus.CombinedStatusSuccess,
commitstatus.CombinedStatusPending,
commitstatus.CombinedStatusFailure,
commitstatus.CombinedStatusPending,
commitstatus.CombinedStatusSuccess,
}
for i, commitStatuses := range testCases {

View File

@ -99,7 +99,7 @@ func CreateCommitStatus(ctx context.Context, repo *repo_model.Repository, creato
return fmt.Errorf("NewCommitStatus[repo_id: %d, user_id: %d, sha: %s]: %w", repo.ID, creator.ID, sha, err)
}
return git_model.UpdateCommitStatusSummary(ctx, repo.ID, commit.ID.String())
return git_model.InsertOrUpdateCombinedStatus(ctx, repo.ID, commit.ID.String())
}); err != nil {
return err
}