From edda1615ec4d59a9bf4e290f4e1aacc838b09dd0 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 20 Jan 2020 12:01:47 +0800 Subject: [PATCH 1/7] Fix wrong hint when status checking is running on pull request view --- models/commit_status.go | 57 ++++--------------- modules/structs/attachment.go | 1 + modules/structs/commit_status.go | 63 +++++++++++++++++++++ routers/api/v1/repo/status.go | 17 +++--- routers/repo/pull.go | 5 +- services/pull/commit_status.go | 56 +++++++++++++++--- templates/repo/issue/view_content/pull.tmpl | 5 +- 7 files changed, 140 insertions(+), 64 deletions(-) create mode 100644 modules/structs/commit_status.go diff --git a/models/commit_status.go b/models/commit_status.go index 4e0f8166f392a..85888eb1d1a59 100644 --- a/models/commit_status.go +++ b/models/commit_status.go @@ -19,52 +19,19 @@ import ( "xorm.io/xorm" ) -// CommitStatusState holds the state of a Status -// It can be "pending", "success", "error", "failure", and "warning" -type CommitStatusState string - -// IsWorseThan returns true if this State is worse than the given State -func (css CommitStatusState) IsWorseThan(css2 CommitStatusState) bool { - switch css { - case CommitStatusError: - return true - case CommitStatusFailure: - return css2 != CommitStatusError - case CommitStatusWarning: - return css2 != CommitStatusError && css2 != CommitStatusFailure - case CommitStatusSuccess: - return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning - default: - return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning && css2 != CommitStatusSuccess - } -} - -const ( - // CommitStatusPending is for when the Status is Pending - CommitStatusPending CommitStatusState = "pending" - // CommitStatusSuccess is for when the Status is Success - CommitStatusSuccess CommitStatusState = "success" - // CommitStatusError is for when the Status is Error - CommitStatusError CommitStatusState = "error" - // CommitStatusFailure is for when the Status is Failure - CommitStatusFailure CommitStatusState = "failure" - // CommitStatusWarning is for when the Status is Warning - CommitStatusWarning CommitStatusState = "warning" -) - // CommitStatus holds a single Status of a single Commit type CommitStatus struct { - ID int64 `xorm:"pk autoincr"` - Index int64 `xorm:"INDEX UNIQUE(repo_sha_index)"` - RepoID int64 `xorm:"INDEX UNIQUE(repo_sha_index)"` - Repo *Repository `xorm:"-"` - State CommitStatusState `xorm:"VARCHAR(7) NOT NULL"` - SHA string `xorm:"VARCHAR(64) NOT NULL INDEX UNIQUE(repo_sha_index)"` - TargetURL string `xorm:"TEXT"` - Description string `xorm:"TEXT"` - ContextHash string `xorm:"char(40) index"` - Context string `xorm:"TEXT"` - Creator *User `xorm:"-"` + ID int64 `xorm:"pk autoincr"` + Index int64 `xorm:"INDEX UNIQUE(repo_sha_index)"` + RepoID int64 `xorm:"INDEX UNIQUE(repo_sha_index)"` + Repo *Repository `xorm:"-"` + State api.CommitStatusState `xorm:"VARCHAR(7) NOT NULL"` + SHA string `xorm:"VARCHAR(64) NOT NULL INDEX UNIQUE(repo_sha_index)"` + TargetURL string `xorm:"TEXT"` + Description string `xorm:"TEXT"` + ContextHash string `xorm:"char(40) index"` + Context string `xorm:"TEXT"` + Creator *User `xorm:"-"` CreatorID int64 CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` @@ -118,7 +85,7 @@ func (status *CommitStatus) APIFormat() *api.Status { // CalcCommitStatus returns commit status state via some status, the commit statues should order by id desc func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus { var lastStatus *CommitStatus - var state CommitStatusState + var state api.CommitStatusState for _, status := range statuses { if status.State.IsWorseThan(state) { state = status.State diff --git a/modules/structs/attachment.go b/modules/structs/attachment.go index 954956f328747..7becd9433542b 100644 --- a/modules/structs/attachment.go +++ b/modules/structs/attachment.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. package structs // import "code.gitea.io/gitea/modules/structs" + import ( "time" ) diff --git a/modules/structs/commit_status.go b/modules/structs/commit_status.go new file mode 100644 index 0000000000000..40dbb00a5f45f --- /dev/null +++ b/modules/structs/commit_status.go @@ -0,0 +1,63 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package structs + +// CommitStatusState holds the state of a Status +// It can be "pending", "success", "error", "failure", and "warning" +type CommitStatusState string + +const ( + // CommitStatusPending is for when the Status is Pending + CommitStatusPending CommitStatusState = "pending" + // CommitStatusSuccess is for when the Status is Success + CommitStatusSuccess CommitStatusState = "success" + // CommitStatusError is for when the Status is Error + CommitStatusError CommitStatusState = "error" + // CommitStatusFailure is for when the Status is Failure + CommitStatusFailure CommitStatusState = "failure" + // CommitStatusWarning is for when the Status is Warning + CommitStatusWarning CommitStatusState = "warning" +) + +// IsWorseThan returns true if this State is worse than the given State +func (css CommitStatusState) IsWorseThan(css2 CommitStatusState) bool { + switch css { + case CommitStatusError: + return true + case CommitStatusFailure: + return css2 != CommitStatusError + case CommitStatusWarning: + return css2 != CommitStatusError && css2 != CommitStatusFailure + case CommitStatusSuccess: + return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning + default: + return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning && css2 != CommitStatusSuccess + } +} + +// IsPending represents if commit status state is pending +func (css CommitStatusState) IsPending() bool { + return css == CommitStatusPending +} + +// IsSuccess represents if commit status state is success +func (css CommitStatusState) IsSuccess() bool { + return css == CommitStatusSuccess +} + +// IsError represents if commit status state is error +func (css CommitStatusState) IsError() bool { + return css == CommitStatusError +} + +// IsFailure represents if commit status state is failure +func (css CommitStatusState) IsFailure() bool { + return css == CommitStatusFailure +} + +// IsWarning represents if commit status state is warning +func (css CommitStatusState) IsWarning() bool { + return css == CommitStatusWarning +} diff --git a/routers/api/v1/repo/status.go b/routers/api/v1/repo/status.go index c137b64f5c821..c6bd52a3b3c34 100644 --- a/routers/api/v1/repo/status.go +++ b/routers/api/v1/repo/status.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/repofiles" + "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs" ) @@ -53,7 +54,7 @@ func NewCommitStatus(ctx *context.APIContext, form api.CreateStatusOption) { return } status := &models.CommitStatus{ - State: models.CommitStatusState(form.State), + State: api.CommitStatusState(form.State), TargetURL: form.TargetURL, Description: form.Description, Context: form.Context, @@ -220,13 +221,13 @@ func getCommitStatuses(ctx *context.APIContext, sha string) { } type combinedCommitStatus struct { - State models.CommitStatusState `json:"state"` - SHA string `json:"sha"` - TotalCount int `json:"total_count"` - Statuses []*api.Status `json:"statuses"` - Repo *api.Repository `json:"repository"` - CommitURL string `json:"commit_url"` - URL string `json:"url"` + State structs.CommitStatusState `json:"state"` + SHA string `json:"sha"` + TotalCount int `json:"total_count"` + Statuses []*api.Status `json:"statuses"` + Repo *api.Repository `json:"repository"` + CommitURL string `json:"commit_url"` + URL string `json:"url"` } // GetCombinedCommitStatusByRef returns the combined status for any given commit hash diff --git a/routers/repo/pull.go b/routers/repo/pull.go index f6397096e25e4..8abdf2372389e 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -25,6 +25,7 @@ import ( "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/repofiles" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/gitdiff" pull_service "code.gitea.io/gitea/services/pull" @@ -417,7 +418,9 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare } return false } - ctx.Data["IsRequiredStatusCheckSuccess"] = pull_service.IsCommitStatusContextSuccess(commitStatuses, pull.ProtectedBranch.StatusCheckContexts) + state := pull_service.MergeRequiredContextsCommitStatus(commitStatuses, pull.ProtectedBranch.StatusCheckContexts) + ctx.Data["RequiredStatusCheckState"] = state + ctx.Data["IsRequiredStatusCheckSuccess"] = state == structs.CommitStatusSuccess } ctx.Data["HeadBranchMovedOn"] = headBranchSha != sha diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index ca00cdaad9bc4..6da0d0596482b 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -8,15 +8,47 @@ package pull import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/structs" + "github.com/pkg/errors" ) +// MergeRequiredContextesCommitStatus returns a commit status state for given required contexts +func MergeRequiredContextsCommitStatus(commitStatuses []*models.CommitStatus, requiredContexts []string) structs.CommitStatusState { + if len(requiredContexts) == 0 { + status := models.CalcCommitStatus(commitStatuses) + if status != nil { + return status.State + } + return structs.CommitStatusSuccess + } + + var returnedStatus = structs.CommitStatusPending + for _, ctx := range requiredContexts { + var targetStatus structs.CommitStatusState + for _, commitStatus := range commitStatuses { + if commitStatus.Context == ctx { + targetStatus = commitStatus.State + break + } + } + + if targetStatus == "" { + targetStatus = structs.CommitStatusPending + } + if targetStatus.IsWorseThan(returnedStatus) { + returnedStatus = targetStatus + } + } + return returnedStatus +} + // IsCommitStatusContextSuccess returns true if all required status check contexts succeed. func IsCommitStatusContextSuccess(commitStatuses []*models.CommitStatus, requiredContexts []string) bool { // If no specific context is required, require that last commit status is a success if len(requiredContexts) == 0 { status := models.CalcCommitStatus(commitStatuses) - if status == nil || status.State != models.CommitStatusSuccess { + if status == nil || status.State != structs.CommitStatusSuccess { return false } return true @@ -26,7 +58,7 @@ func IsCommitStatusContextSuccess(commitStatuses []*models.CommitStatus, require var found bool for _, commitStatus := range commitStatuses { if commitStatus.Context == ctx { - if commitStatus.State != models.CommitStatusSuccess { + if commitStatus.State != structs.CommitStatusSuccess { return false } @@ -50,30 +82,38 @@ func IsPullCommitStatusPass(pr *models.PullRequest) (bool, error) { return true, nil } + state, err := PullRequestCommitStatusState(pr) + if err != nil { + return false, err + } + return state.IsSuccess(), nil +} + +func PullRequestCommitStatusState(pr *models.PullRequest) (structs.CommitStatusState, error) { // check if all required status checks are successful headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath()) if err != nil { - return false, errors.Wrap(err, "OpenRepository") + return "", errors.Wrap(err, "OpenRepository") } defer headGitRepo.Close() if !headGitRepo.IsBranchExist(pr.HeadBranch) { - return false, errors.New("Head branch does not exist, can not merge") + return "", errors.New("Head branch does not exist, can not merge") } sha, err := headGitRepo.GetBranchCommitID(pr.HeadBranch) if err != nil { - return false, errors.Wrap(err, "GetBranchCommitID") + return "", errors.Wrap(err, "GetBranchCommitID") } if err := pr.LoadBaseRepo(); err != nil { - return false, errors.Wrap(err, "LoadBaseRepo") + return "", errors.Wrap(err, "LoadBaseRepo") } commitStatuses, err := models.GetLatestCommitStatus(pr.BaseRepo, sha, 0) if err != nil { - return false, errors.Wrap(err, "GetLatestCommitStatus") + return "", errors.Wrap(err, "GetLatestCommitStatus") } - return IsCommitStatusContextSuccess(commitStatuses, pr.ProtectedBranch.StatusCheckContexts), nil + return MergeRequiredContextsCommitStatus(commitStatuses, pr.ProtectedBranch.StatusCheckContexts), nil } diff --git a/templates/repo/issue/view_content/pull.tmpl b/templates/repo/issue/view_content/pull.tmpl index e0a48442e0e64..b2ff4caa4ef9d 100644 --- a/templates/repo/issue/view_content/pull.tmpl +++ b/templates/repo/issue/view_content/pull.tmpl @@ -47,7 +47,8 @@ {{else if .IsPullRequestBroken}}red {{else if .IsBlockedByApprovals}}red {{else if .IsBlockedByRejection}}red - {{else if and .EnableStatusCheck (not .IsRequiredStatusCheckSuccess)}}red + {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsFailure .RequiredStatusCheckState.IsError)}}red + {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsPending .RequiredStatusCheckState.IsWarning}}yellow {{else if and .RequireSigned (not .WillSign)}}}red {{else if .Issue.PullRequest.IsChecking}}yellow {{else if .Issue.PullRequest.CanAutoMerge}}green @@ -118,7 +119,7 @@ {{$.i18n.Tr "repo.pulls.blocked_by_rejection"}} - {{else if and .EnableStatusCheck (not .IsRequiredStatusCheckSuccess)}} + {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsError .RequiredStatusCheckState.IsFailure)}}
{{$.i18n.Tr "repo.pulls.required_status_check_failed"}} From ecde1d5e041b38aa6c64d145d07edcb0d23c0019 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 20 Jan 2020 12:16:06 +0800 Subject: [PATCH 2/7] fix lint --- services/pull/commit_status.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index 6da0d0596482b..2b90f6011c56e 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -13,7 +13,7 @@ import ( "github.com/pkg/errors" ) -// MergeRequiredContextesCommitStatus returns a commit status state for given required contexts +// MergeRequiredContextsCommitStatus returns a commit status state for given required contexts func MergeRequiredContextsCommitStatus(commitStatuses []*models.CommitStatus, requiredContexts []string) structs.CommitStatusState { if len(requiredContexts) == 0 { status := models.CalcCommitStatus(commitStatuses) @@ -82,14 +82,15 @@ func IsPullCommitStatusPass(pr *models.PullRequest) (bool, error) { return true, nil } - state, err := PullRequestCommitStatusState(pr) + state, err := GetPullRequestCommitStatusState(pr) if err != nil { return false, err } return state.IsSuccess(), nil } -func PullRequestCommitStatusState(pr *models.PullRequest) (structs.CommitStatusState, error) { +// GetPullRequestCommitStatusState returns pull request merged commit status state +func GetPullRequestCommitStatusState(pr *models.PullRequest) (structs.CommitStatusState, error) { // check if all required status checks are successful headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath()) if err != nil { From 2027db4589509beed12e9de583a5c1593fc6583d Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 20 Jan 2020 23:39:39 +0800 Subject: [PATCH 3/7] fix test --- models/commit_status_test.go | 11 ++++++----- modules/structs/commit_status.go | 4 ++-- routers/repo/pull.go | 3 +-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/models/commit_status_test.go b/models/commit_status_test.go index 97783ae6f1a1c..90d72cd74dfb2 100644 --- a/models/commit_status_test.go +++ b/models/commit_status_test.go @@ -7,6 +7,7 @@ package models import ( "testing" + "code.gitea.io/gitea/modules/structs" "github.com/stretchr/testify/assert" ) @@ -23,22 +24,22 @@ func TestGetCommitStatuses(t *testing.T) { assert.Len(t, statuses, 5) assert.Equal(t, "ci/awesomeness", statuses[0].Context) - assert.Equal(t, CommitStatusPending, statuses[0].State) + assert.Equal(t, structs.CommitStatusPending, statuses[0].State) assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[0].APIURL()) assert.Equal(t, "cov/awesomeness", statuses[1].Context) - assert.Equal(t, CommitStatusWarning, statuses[1].State) + assert.Equal(t, structs.CommitStatusWarning, statuses[1].State) assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[1].APIURL()) assert.Equal(t, "cov/awesomeness", statuses[2].Context) - assert.Equal(t, CommitStatusSuccess, statuses[2].State) + assert.Equal(t, structs.CommitStatusSuccess, statuses[2].State) assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[2].APIURL()) assert.Equal(t, "ci/awesomeness", statuses[3].Context) - assert.Equal(t, CommitStatusFailure, statuses[3].State) + assert.Equal(t, structs.CommitStatusFailure, statuses[3].State) assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[3].APIURL()) assert.Equal(t, "deploy/awesomeness", statuses[4].Context) - assert.Equal(t, CommitStatusError, statuses[4].State) + assert.Equal(t, structs.CommitStatusError, statuses[4].State) assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[4].APIURL()) } diff --git a/modules/structs/commit_status.go b/modules/structs/commit_status.go index 40dbb00a5f45f..c4aa9fc24e0bf 100644 --- a/modules/structs/commit_status.go +++ b/modules/structs/commit_status.go @@ -30,10 +30,10 @@ func (css CommitStatusState) IsWorseThan(css2 CommitStatusState) bool { return css2 != CommitStatusError case CommitStatusWarning: return css2 != CommitStatusError && css2 != CommitStatusFailure - case CommitStatusSuccess: + case CommitStatusPending: return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning default: - return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning && css2 != CommitStatusSuccess + return css2 != CommitStatusError && css2 != CommitStatusFailure && css2 != CommitStatusWarning && css2 != CommitStatusPending } } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 8abdf2372389e..c84174783a111 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -25,7 +25,6 @@ import ( "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/repofiles" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/gitdiff" pull_service "code.gitea.io/gitea/services/pull" @@ -420,7 +419,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare } state := pull_service.MergeRequiredContextsCommitStatus(commitStatuses, pull.ProtectedBranch.StatusCheckContexts) ctx.Data["RequiredStatusCheckState"] = state - ctx.Data["IsRequiredStatusCheckSuccess"] = state == structs.CommitStatusSuccess + ctx.Data["IsRequiredStatusCheckSuccess"] = state.IsSuccess() } ctx.Data["HeadBranchMovedOn"] = headBranchSha != sha From 59ded2459deed8b91ca96868309c2dffbf8a16af Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 21 Jan 2020 00:02:10 +0800 Subject: [PATCH 4/7] fix test --- integrations/pull_status_test.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/integrations/pull_status_test.go b/integrations/pull_status_test.go index fde2d3cc9b383..95ed755fbb63e 100644 --- a/integrations/pull_status_test.go +++ b/integrations/pull_status_test.go @@ -11,7 +11,6 @@ import ( "strings" "testing" - "code.gitea.io/gitea/models" api "code.gitea.io/gitea/modules/structs" "github.com/stretchr/testify/assert" @@ -48,20 +47,20 @@ func TestPullCreate_CommitStatus(t *testing.T) { commitID := path.Base(commitURL) - statusList := []models.CommitStatusState{ - models.CommitStatusPending, - models.CommitStatusError, - models.CommitStatusFailure, - models.CommitStatusWarning, - models.CommitStatusSuccess, + statusList := []api.CommitStatusState{ + api.CommitStatusPending, + api.CommitStatusError, + api.CommitStatusFailure, + api.CommitStatusWarning, + api.CommitStatusSuccess, } - statesIcons := map[models.CommitStatusState]string{ - models.CommitStatusPending: "circle icon yellow", - models.CommitStatusSuccess: "check icon green", - models.CommitStatusError: "warning icon red", - models.CommitStatusFailure: "remove icon red", - models.CommitStatusWarning: "warning sign icon yellow", + statesIcons := map[api.CommitStatusState]string{ + api.CommitStatusPending: "circle icon yellow", + api.CommitStatusSuccess: "check icon green", + api.CommitStatusError: "warning icon red", + api.CommitStatusFailure: "remove icon red", + api.CommitStatusWarning: "warning sign icon yellow", } // Update commit status, and check if icon is updated as well From a78835140f2d3ff9abba52dac1f04e712a4a1675 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 21 Jan 2020 13:14:56 +0800 Subject: [PATCH 5/7] fix wrong tmpl --- templates/repo/issue/view_content/pull.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/issue/view_content/pull.tmpl b/templates/repo/issue/view_content/pull.tmpl index b2ff4caa4ef9d..32c744515c0a4 100644 --- a/templates/repo/issue/view_content/pull.tmpl +++ b/templates/repo/issue/view_content/pull.tmpl @@ -48,7 +48,7 @@ {{else if .IsBlockedByApprovals}}red {{else if .IsBlockedByRejection}}red {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsFailure .RequiredStatusCheckState.IsError)}}red - {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsPending .RequiredStatusCheckState.IsWarning}}yellow + {{else if and .EnableStatusCheck (or .RequiredStatusCheckState.IsPending .RequiredStatusCheckState.IsWarning)}}yellow {{else if and .RequireSigned (not .WillSign)}}}red {{else if .Issue.PullRequest.IsChecking}}yellow {{else if .Issue.PullRequest.CanAutoMerge}}green From 3320ba5621280ed5bebf4a51b950e8c67646d7f7 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 22 Jan 2020 09:22:17 +0800 Subject: [PATCH 6/7] fix import --- routers/api/v1/repo/status.go | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/routers/api/v1/repo/status.go b/routers/api/v1/repo/status.go index c6bd52a3b3c34..632b46efb097b 100644 --- a/routers/api/v1/repo/status.go +++ b/routers/api/v1/repo/status.go @@ -11,7 +11,6 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/repofiles" - "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs" ) @@ -221,13 +220,13 @@ func getCommitStatuses(ctx *context.APIContext, sha string) { } type combinedCommitStatus struct { - State structs.CommitStatusState `json:"state"` - SHA string `json:"sha"` - TotalCount int `json:"total_count"` - Statuses []*api.Status `json:"statuses"` - Repo *api.Repository `json:"repository"` - CommitURL string `json:"commit_url"` - URL string `json:"url"` + State api.CommitStatusState `json:"state"` + SHA string `json:"sha"` + TotalCount int `json:"total_count"` + Statuses []*api.Status `json:"statuses"` + Repo *api.Repository `json:"repository"` + CommitURL string `json:"commit_url"` + URL string `json:"url"` } // GetCombinedCommitStatusByRef returns the combined status for any given commit hash From 0323362e23c13dbb4399f08db8803ca0812be951 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 22 Jan 2020 09:31:25 +0800 Subject: [PATCH 7/7] rename function name --- models/commit_status.go | 2 +- modules/structs/commit_status.go | 4 ++-- routers/api/v1/repo/status.go | 2 +- services/pull/commit_status.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/models/commit_status.go b/models/commit_status.go index 85888eb1d1a59..4102e731e183e 100644 --- a/models/commit_status.go +++ b/models/commit_status.go @@ -87,7 +87,7 @@ func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus { var lastStatus *CommitStatus var state api.CommitStatusState for _, status := range statuses { - if status.State.IsWorseThan(state) { + if status.State.NoBetterThan(state) { state = status.State lastStatus = status } diff --git a/modules/structs/commit_status.go b/modules/structs/commit_status.go index c4aa9fc24e0bf..397356b133413 100644 --- a/modules/structs/commit_status.go +++ b/modules/structs/commit_status.go @@ -21,8 +21,8 @@ const ( CommitStatusWarning CommitStatusState = "warning" ) -// IsWorseThan returns true if this State is worse than the given State -func (css CommitStatusState) IsWorseThan(css2 CommitStatusState) bool { +// NoBetterThan returns true if this State is no better than the given State +func (css CommitStatusState) NoBetterThan(css2 CommitStatusState) bool { switch css { case CommitStatusError: return true diff --git a/routers/api/v1/repo/status.go b/routers/api/v1/repo/status.go index 632b46efb097b..b6b3d495ca59b 100644 --- a/routers/api/v1/repo/status.go +++ b/routers/api/v1/repo/status.go @@ -293,7 +293,7 @@ func GetCombinedCommitStatusByRef(ctx *context.APIContext) { retStatus.Statuses = make([]*api.Status, 0, len(statuses)) for _, status := range statuses { retStatus.Statuses = append(retStatus.Statuses, status.APIFormat()) - if status.State.IsWorseThan(retStatus.State) { + if status.State.NoBetterThan(retStatus.State) { retStatus.State = status.State } } diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index 2b90f6011c56e..3dccfb1f0c2e6 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -36,7 +36,7 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*models.CommitStatus, re if targetStatus == "" { targetStatus = structs.CommitStatusPending } - if targetStatus.IsWorseThan(returnedStatus) { + if targetStatus.NoBetterThan(returnedStatus) { returnedStatus = targetStatus } }