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:
parent
43ed136609
commit
083e0ba97a
@ -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
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user