mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Refuse merge until all required status checks success (#7481)
* refuse merge until ci successfully * deny merge request when required status checkes not succeed on merge Post and API * add database migration for added columns on protected_branch * fix migration * fix protected branch check bug * fix protected branch settings * remove duplicated code on check pull request's required commit statuses pass * remove unused codes * fix migration * add newline for template file * fix go mod * rename function name and some other fixes * fix template * fix bug pull view * remove go1.12 wrong dependencies * add administrator bypass when protected branch status check enabled * fix bug * improve the codes
This commit is contained in:
		@@ -9,6 +9,7 @@ import (
 | 
			
		||||
	"crypto/sha1"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
@@ -205,6 +206,27 @@ func GetLatestCommitStatus(repo *Repository, sha string, page int) ([]*CommitSta
 | 
			
		||||
	return statuses, x.In("id", ids).Find(&statuses)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindRepoRecentCommitStatusContexts returns repository's recent commit status contexts
 | 
			
		||||
func FindRepoRecentCommitStatusContexts(repoID int64, before time.Duration) ([]string, error) {
 | 
			
		||||
	start := timeutil.TimeStampNow().AddDuration(-before)
 | 
			
		||||
	ids := make([]int64, 0, 10)
 | 
			
		||||
	if err := x.Table("commit_status").
 | 
			
		||||
		Where("repo_id = ?", repoID).
 | 
			
		||||
		And("updated_unix >= ?", start).
 | 
			
		||||
		Select("max( id ) as id").
 | 
			
		||||
		GroupBy("context_hash").OrderBy("max( id ) desc").
 | 
			
		||||
		Find(&ids); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var contexts = make([]string, 0, len(ids))
 | 
			
		||||
	if len(ids) == 0 {
 | 
			
		||||
		return contexts, nil
 | 
			
		||||
	}
 | 
			
		||||
	return contexts, x.Select("context").Table("commit_status").In("id", ids).Find(&contexts)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewCommitStatusOptions holds options for creating a CommitStatus
 | 
			
		||||
type NewCommitStatusOptions struct {
 | 
			
		||||
	Repo         *Repository
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user