diff --git a/models/git/combined_status.go b/models/git/combined_status.go index 568c8b46d7..1caa1cba76 100644 --- a/models/git/combined_status.go +++ b/models/git/combined_status.go @@ -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 diff --git a/models/git/commit_status.go b/models/git/commit_status.go index 79aa0d362e..74a6258869 100644 --- a/models/git/commit_status.go +++ b/models/git/commit_status.go @@ -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, } } diff --git a/models/git/commit_status_test.go b/models/git/commit_status_test.go index cd3b9a8dfa..a502dd1c63 100644 --- a/models/git/commit_status_test.go +++ b/models/git/commit_status_test.go @@ -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, }, } diff --git a/modules/commitstatus/combined_status.go b/modules/commitstatus/combined_status.go index 378dd1ad7d..f0946bf323 100644 --- a/modules/commitstatus/combined_status.go +++ b/modules/commitstatus/combined_status.go @@ -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 } diff --git a/modules/commitstatus/commit_status.go b/modules/commitstatus/commit_status.go index 1bb979f528..432fe7449f 100644 --- a/modules/commitstatus/commit_status.go +++ b/modules/commitstatus/commit_status.go @@ -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 } diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index d40a69de2b..eff80eb618 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -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) diff --git a/services/convert/status.go b/services/convert/status.go index 997de94d3c..469f30bee3 100644 --- a/services/convert/status.go +++ b/services/convert/status.go @@ -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", } } diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index 7da02e28ab..ec52565faf 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -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 { diff --git a/services/pull/commit_status_test.go b/services/pull/commit_status_test.go index 6ae6d20de1..fdec95f43c 100644 --- a/services/pull/commit_status_test.go +++ b/services/pull/commit_status_test.go @@ -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 { diff --git a/services/repository/commitstatus/commitstatus.go b/services/repository/commitstatus/commitstatus.go index 3eea51513c..4bd4415775 100644 --- a/services/repository/commitstatus/commitstatus.go +++ b/services/repository/commitstatus/commitstatus.go @@ -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 }