From 668d3d02aa0222c839e42bc2608ad1fa05b8640b Mon Sep 17 00:00:00 2001 From: Elias Norberg Date: Mon, 30 Sep 2019 04:33:40 +0200 Subject: [PATCH] If no specific context is required for status check, require an overall success (#8318) Signed-off-by: Elias Norberg --- options/locale/locale_en-US.ini | 2 +- services/pull/commit_status.go | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 7bb453968..938c53af3 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1326,7 +1326,7 @@ settings.protect_merge_whitelist_committers_desc = Allow only whitelisted users settings.protect_merge_whitelist_users = Whitelisted users for merging: settings.protect_merge_whitelist_teams = Whitelisted teams for merging: settings.protect_check_status_contexts = Enable Status Check -settings.protect_check_status_contexts_desc = Require status checks to pass before merging Choose which status checks must pass before branches can be merged into a branch that matches this rule. When enabled, commits must first be pushed to another branch, then merged or pushed directly to a branch that matches this rule after status checks have passed. +settings.protect_check_status_contexts_desc = Require status checks to pass before merging Choose which status checks must pass before branches can be merged into a branch that matches this rule. When enabled, commits must first be pushed to another branch, then merged or pushed directly to a branch that matches this rule after status checks have passed. If no contexts are selected, the last commit must be successful regardless of context. settings.protect_check_status_contexts_list = Status checks found in the last week for this repository settings.protect_required_approvals = Required approvals: settings.protect_required_approvals_desc = Allow only to merge pull request with enough positive reviews of whitelisted users or teams. diff --git a/services/pull/commit_status.go b/services/pull/commit_status.go index bdadc329d..2872db7bd 100644 --- a/services/pull/commit_status.go +++ b/services/pull/commit_status.go @@ -8,12 +8,20 @@ package pull import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/git" - "github.com/pkg/errors" ) // 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 { + return false + } + return true + } + for _, ctx := range requiredContexts { var found bool for _, commitStatus := range commitStatuses {