mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-08 01:34:08 +02: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
|
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)
|
commitStatuses, _, err := GetLatestCommitStatus(ctx, repoID, sha, db.ListOptionsAll)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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,
|
// 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() {
|
||||||
_, err := db.GetEngine(ctx).Exec("INSERT INTO commit_status_summary (repo_id,sha,state,target_url) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE state=?",
|
_, 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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if cnt, err := db.GetEngine(ctx).Where("repo_id=? AND sha=?", repoID, sha).
|
if cnt, err := db.GetEngine(ctx).Where("repo_id=? AND sha=?", repoID, sha).
|
||||||
Cols("state, target_url").
|
Cols("state, target_url").
|
||||||
Update(summary); err != nil {
|
Update(combinedStatus); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if cnt == 0 {
|
} else if cnt == 0 {
|
||||||
_, err = db.GetEngine(ctx).Insert(summary)
|
_, err = db.GetEngine(ctx).Insert(combinedStatus)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -232,7 +232,7 @@ func CalcCombinedStatusState(statuses []*CommitStatus) commitstatus.CombinedStat
|
|||||||
for _, status := range statuses {
|
for _, status := range statuses {
|
||||||
states = append(states, status.State)
|
states = append(states, status.State)
|
||||||
}
|
}
|
||||||
return states.Merge()
|
return states.CalcAsCombinedStatusState()
|
||||||
}
|
}
|
||||||
|
|
||||||
// CalcCombinedStatus returns combined status struct, the commit statuses should order by id desc
|
// CalcCombinedStatus returns combined status struct, the commit statuses should order by id desc
|
||||||
@ -252,7 +252,7 @@ func CalcCombinedStatus(statuses []*CommitStatus) *CombinedStatus {
|
|||||||
return &CombinedStatus{
|
return &CombinedStatus{
|
||||||
RepoID: statuses[0].RepoID,
|
RepoID: statuses[0].RepoID,
|
||||||
SHA: statuses[0].SHA,
|
SHA: statuses[0].SHA,
|
||||||
State: states.Merge(),
|
State: states.CalcAsCombinedStatusState(),
|
||||||
TargetURL: targetURL,
|
TargetURL: targetURL,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,7 +78,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusPending,
|
State: commitstatus.CommitStatusPending,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStatePending,
|
expected: commitstatus.CombinedStatusPending,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
statuses: []*git_model.CommitStatus{
|
statuses: []*git_model.CommitStatus{
|
||||||
@ -89,7 +89,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusPending,
|
State: commitstatus.CommitStatusPending,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStatePending,
|
expected: commitstatus.CombinedStatusPending,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
statuses: []*git_model.CommitStatus{
|
statuses: []*git_model.CommitStatus{
|
||||||
@ -103,7 +103,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusSuccess,
|
State: commitstatus.CommitStatusSuccess,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStatePending,
|
expected: commitstatus.CombinedStatusPending,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
statuses: []*git_model.CommitStatus{
|
statuses: []*git_model.CommitStatus{
|
||||||
@ -117,7 +117,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusSuccess,
|
State: commitstatus.CommitStatusSuccess,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStateFailure,
|
expected: commitstatus.CombinedStatusFailure,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
statuses: []*git_model.CommitStatus{
|
statuses: []*git_model.CommitStatus{
|
||||||
@ -131,7 +131,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusSuccess,
|
State: commitstatus.CommitStatusSuccess,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStatePending,
|
expected: commitstatus.CombinedStatusPending,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
statuses: []*git_model.CommitStatus{
|
statuses: []*git_model.CommitStatus{
|
||||||
@ -145,7 +145,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusSuccess,
|
State: commitstatus.CommitStatusSuccess,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStateSuccess,
|
expected: commitstatus.CombinedStatusSuccess,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
statuses: []*git_model.CommitStatus{
|
statuses: []*git_model.CommitStatus{
|
||||||
@ -159,7 +159,7 @@ func Test_CalcCommitStatus(t *testing.T) {
|
|||||||
State: commitstatus.CommitStatusWarning,
|
State: commitstatus.CommitStatusWarning,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expected: commitstatus.CombinedStatusStateFailure,
|
expected: commitstatus.CombinedStatusFailure,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,12 +7,12 @@ package commitstatus
|
|||||||
type CombinedStatusState string
|
type CombinedStatusState string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// CombinedStatusStatePending is for when the CombinedStatus is Pending
|
// CombinedStatusPending is for when the CombinedStatus is Pending
|
||||||
CombinedStatusStatePending CombinedStatusState = "pending"
|
CombinedStatusPending CombinedStatusState = "pending"
|
||||||
// CombinedStatusStateSuccess is for when the CombinedStatus is Success
|
// CombinedStatusSuccess is for when the CombinedStatus is Success
|
||||||
CombinedStatusStateSuccess CombinedStatusState = "success"
|
CombinedStatusSuccess CombinedStatusState = "success"
|
||||||
// CombinedStatusStateFailure is for when the CombinedStatus is Failure
|
// CombinedStatusFailure is for when the CombinedStatus is Failure
|
||||||
CombinedStatusStateFailure CombinedStatusState = "failure"
|
CombinedStatusFailure CombinedStatusState = "failure"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (cs CombinedStatusState) String() string {
|
func (cs CombinedStatusState) String() string {
|
||||||
@ -21,15 +21,15 @@ func (cs CombinedStatusState) String() string {
|
|||||||
|
|
||||||
// IsPending represents if commit status state is pending
|
// IsPending represents if commit status state is pending
|
||||||
func (cs CombinedStatusState) IsPending() bool {
|
func (cs CombinedStatusState) IsPending() bool {
|
||||||
return cs == CombinedStatusStatePending
|
return cs == CombinedStatusPending
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsSuccess represents if commit status state is success
|
// IsSuccess represents if commit status state is success
|
||||||
func (cs CombinedStatusState) IsSuccess() bool {
|
func (cs CombinedStatusState) IsSuccess() bool {
|
||||||
return cs == CombinedStatusStateSuccess
|
return cs == CombinedStatusSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsFailure represents if commit status state is failure
|
// IsFailure represents if commit status state is failure
|
||||||
func (cs CombinedStatusState) IsFailure() bool {
|
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
|
// > 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
|
||||||
|
|
||||||
func (css CommitStatusStates) Merge() CombinedStatusState {
|
func (css CommitStatusStates) CalcAsCombinedStatusState() CombinedStatusState {
|
||||||
successCnt := 0
|
successCnt := 0
|
||||||
for _, state := range css {
|
for _, state := range css {
|
||||||
switch {
|
switch {
|
||||||
case state.IsError() || state.IsFailure():
|
case state.IsError() || state.IsFailure():
|
||||||
return CombinedStatusStateFailure
|
return CombinedStatusFailure
|
||||||
case state.IsPending():
|
case state.IsPending():
|
||||||
case state.IsSuccess() || state.IsWarning():
|
case state.IsSuccess() || state.IsWarning():
|
||||||
successCnt++
|
successCnt++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if successCnt > 0 && successCnt == len(css) {
|
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 {
|
for commitID, cs := range commitStatuses {
|
||||||
commitStatus[commitID] = git_model.CalcCombinedStatus(cs)
|
combinedStatuses[commitID] = git_model.CalcCombinedStatus(cs)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Data["Keyword"] = kw
|
ctx.Data["Keyword"] = kw
|
||||||
ctx.Data["Branches"] = branches
|
ctx.Data["Branches"] = branches
|
||||||
ctx.Data["CommitStatus"] = commitStatus
|
ctx.Data["CommitStatus"] = combinedStatuses
|
||||||
ctx.Data["CommitStatuses"] = commitStatuses
|
ctx.Data["CommitStatuses"] = commitStatuses
|
||||||
ctx.Data["DefaultBranchBranch"] = defaultBranch
|
ctx.Data["DefaultBranchBranch"] = defaultBranch
|
||||||
pager := context.NewPagination(int(branchesCount), pageSize, page, 5)
|
pager := context.NewPagination(int(branchesCount), pageSize, page, 5)
|
||||||
|
|||||||
@ -5,6 +5,7 @@ package convert
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"net/url"
|
||||||
|
|
||||||
git_model "code.gitea.io/gitea/models/git"
|
git_model "code.gitea.io/gitea/models/git"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
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,
|
SHA: combinedStatus.SHA,
|
||||||
TotalCount: len(statuses),
|
TotalCount: len(statuses),
|
||||||
Repository: repo,
|
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 {
|
func IsCommitStatusContextSuccess(commitStatuses []*git_model.CommitStatus, requiredContexts []string) bool {
|
||||||
// If no specific context is required, require that last commit status is a success
|
// If no specific context is required, require that last commit status is a success
|
||||||
if len(requiredContexts) == 0 {
|
if len(requiredContexts) == 0 {
|
||||||
return git_model.CalcCombinedStatusState(commitStatuses) == commitstatus.CombinedStatusStateSuccess
|
return git_model.CalcCombinedStatusState(commitStatuses) == commitstatus.CombinedStatusSuccess
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, ctx := range requiredContexts {
|
for _, ctx := range requiredContexts {
|
||||||
|
|||||||
@ -50,11 +50,11 @@ func TestMergeRequiredContextsCommitStatus(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testCasesExpected := []commitstatus.CombinedStatusState{
|
testCasesExpected := []commitstatus.CombinedStatusState{
|
||||||
commitstatus.CombinedStatusStateSuccess,
|
commitstatus.CombinedStatusSuccess,
|
||||||
commitstatus.CombinedStatusStatePending,
|
commitstatus.CombinedStatusPending,
|
||||||
commitstatus.CombinedStatusStateFailure,
|
commitstatus.CombinedStatusFailure,
|
||||||
commitstatus.CombinedStatusStatePending,
|
commitstatus.CombinedStatusPending,
|
||||||
commitstatus.CombinedStatusStateSuccess,
|
commitstatus.CombinedStatusSuccess,
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, commitStatuses := range testCases {
|
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 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 {
|
}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user