aboutsummaryrefslogtreecommitdiffstats
path: root/services/pull/commit_status.go
diff options
context:
space:
mode:
Diffstat (limited to 'services/pull/commit_status.go')
-rw-r--r--services/pull/commit_status.go46
1 files changed, 10 insertions, 36 deletions
diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go
index 0bfff21746..58d26c5a00 100644
--- a/services/pull/commit_status.go
+++ b/services/pull/commit_status.go
@@ -46,57 +46,31 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus,
// If required rule not match any action, then it is pending
if targetStatus == "" {
- if structs.CommitStatusPending.NoBetterThan(returnedStatus) {
+ if structs.CommitStatusPending.HasHigherPriorityThan(returnedStatus) {
returnedStatus = structs.CommitStatusPending
}
break
}
- if targetStatus.NoBetterThan(returnedStatus) {
+ if targetStatus.HasHigherPriorityThan(returnedStatus) {
returnedStatus = targetStatus
}
}
}
if matchedCount == 0 && returnedStatus == structs.CommitStatusSuccess {
- status := git_model.CalcCommitStatus(commitStatuses)
- if status != nil {
- return status.State
+ if len(commitStatuses) == 0 {
+ // "no statuses" should mean "pending"
+ return structs.CommitStatusPending
}
- return structs.CommitStatusSuccess
- }
-
- return returnedStatus
-}
-
-// IsCommitStatusContextSuccess returns true if all required status check contexts succeed.
-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 {
status := git_model.CalcCommitStatus(commitStatuses)
- if status == nil || status.State != structs.CommitStatusSuccess {
- return false
+ if status.State == structs.CommitStatusSkipped {
+ return structs.CommitStatusSuccess // if all statuses are skipped, return success
}
- return true
+ return status.State
}
- for _, ctx := range requiredContexts {
- var found bool
- for _, commitStatus := range commitStatuses {
- if commitStatus.Context == ctx {
- if commitStatus.State != structs.CommitStatusSuccess {
- return false
- }
-
- found = true
- break
- }
- }
- if !found {
- return false
- }
- }
- return true
+ return returnedStatus
}
// IsPullCommitStatusPass returns if all required status checks PASS
@@ -151,7 +125,7 @@ func GetPullRequestCommitStatusState(ctx context.Context, pr *issues_model.PullR
return "", errors.Wrap(err, "LoadBaseRepo")
}
- commitStatuses, _, err := git_model.GetLatestCommitStatus(ctx, pr.BaseRepo.ID, sha, db.ListOptionsAll)
+ commitStatuses, err := git_model.GetLatestCommitStatus(ctx, pr.BaseRepo.ID, sha, db.ListOptionsAll)
if err != nil {
return "", errors.Wrap(err, "GetLatestCommitStatus")
}