mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	backport #29143 Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -635,6 +635,24 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if pb != nil && pb.EnableStatusCheck { | 	if pb != nil && pb.EnableStatusCheck { | ||||||
|  |  | ||||||
|  | 		var missingRequiredChecks []string | ||||||
|  | 		for _, requiredContext := range pb.StatusCheckContexts { | ||||||
|  | 			contextFound := false | ||||||
|  | 			matchesRequiredContext := createRequiredContextMatcher(requiredContext) | ||||||
|  | 			for _, presentStatus := range commitStatuses { | ||||||
|  | 				if matchesRequiredContext(presentStatus.Context) { | ||||||
|  | 					contextFound = true | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if !contextFound { | ||||||
|  | 				missingRequiredChecks = append(missingRequiredChecks, requiredContext) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		ctx.Data["MissingRequiredChecks"] = missingRequiredChecks | ||||||
|  |  | ||||||
| 		ctx.Data["is_context_required"] = func(context string) bool { | 		ctx.Data["is_context_required"] = func(context string) bool { | ||||||
| 			for _, c := range pb.StatusCheckContexts { | 			for _, c := range pb.StatusCheckContexts { | ||||||
| 				if c == context { | 				if c == context { | ||||||
| @@ -703,6 +721,18 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C | |||||||
| 	return compareInfo | 	return compareInfo | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func createRequiredContextMatcher(requiredContext string) func(string) bool { | ||||||
|  | 	if gp, err := glob.Compile(requiredContext); err == nil { | ||||||
|  | 		return func(contextToCheck string) bool { | ||||||
|  | 			return gp.Match(contextToCheck) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return func(contextToCheck string) bool { | ||||||
|  | 		return requiredContext == contextToCheck | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| type pullCommitList struct { | type pullCommitList struct { | ||||||
| 	Commits             []pull_service.CommitInfo `json:"commits"` | 	Commits             []pull_service.CommitInfo `json:"commits"` | ||||||
| 	LastReviewCommitSha string                    `json:"last_review_commit_sha"` | 	LastReviewCommitSha string                    `json:"last_review_commit_sha"` | ||||||
|   | |||||||
| @@ -50,6 +50,10 @@ func MergeRequiredContextsCommitStatus(commitStatuses []*git_model.CommitStatus, | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if matchedCount != len(requiredContexts) { | ||||||
|  | 		return structs.CommitStatusPending | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if matchedCount == 0 { | 	if matchedCount == 0 { | ||||||
| 		status := git_model.CalcCommitStatus(commitStatuses) | 		status := git_model.CalcCommitStatus(commitStatuses) | ||||||
| 		if status != nil { | 		if status != nil { | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| {{if $.LatestCommitStatus}} | {{if $.LatestCommitStatus}} | ||||||
| 	{{if not $.Issue.PullRequest.HasMerged}} | 	{{if not $.Issue.PullRequest.HasMerged}} | ||||||
| 		<div class="ui top attached header"> | 		<div class="ui top attached header"> | ||||||
| 			{{if eq .LatestCommitStatus.State "pending"}} | 			{{if or (eq .LatestCommitStatus.State "pending") (.MissingRequiredChecks)}} | ||||||
| 				{{ctx.Locale.Tr "repo.pulls.status_checking"}} | 				{{ctx.Locale.Tr "repo.pulls.status_checking"}} | ||||||
| 			{{else if eq .LatestCommitStatus.State "success"}} | 			{{else if eq .LatestCommitStatus.State "success"}} | ||||||
| 				{{ctx.Locale.Tr "repo.pulls.status_checks_success"}} | 				{{ctx.Locale.Tr "repo.pulls.status_checks_success"}} | ||||||
| @@ -14,7 +14,7 @@ | |||||||
| 			{{else}} | 			{{else}} | ||||||
| 				{{ctx.Locale.Tr "repo.pulls.status_checking"}} | 				{{ctx.Locale.Tr "repo.pulls.status_checking"}} | ||||||
| 			{{end}} | 			{{end}} | ||||||
| 			</div> | 		</div> | ||||||
| 	{{end}} | 	{{end}} | ||||||
|  |  | ||||||
| 	{{range $.LatestCommitStatuses}} | 	{{range $.LatestCommitStatuses}} | ||||||
| @@ -31,4 +31,15 @@ | |||||||
| 			</div> | 			</div> | ||||||
| 		</div> | 		</div> | ||||||
| 	{{end}} | 	{{end}} | ||||||
|  | 	{{range .MissingRequiredChecks}} | ||||||
|  | 		<div class="ui attached segment pr-status"> | ||||||
|  | 			{{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}} | ||||||
|  | 			<div class="status-context"> | ||||||
|  | 				<span>{{.}}</span> | ||||||
|  | 				<div class="ui status-details"> | ||||||
|  | 					<div class="ui label">{{ctx.Locale.Tr "repo.pulls.status_checks_requested"}}</div> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 	{{end}} | ||||||
| {{end}} | {{end}} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user