Show status check for merged PRs (#13975)
* Show status check for merged PRs * Handle PRs with no commits * Styling Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: 6543 <6543@obermui.de>
This commit is contained in:
		
							parent
							
								
									48bd02e753
								
							
						
					
					
						commit
						efa9a8a6e3
					
				
					 3 changed files with 41 additions and 28 deletions
				
			
		|  | @ -325,6 +325,20 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.C | ||||||
| 	} | 	} | ||||||
| 	ctx.Data["NumCommits"] = compareInfo.Commits.Len() | 	ctx.Data["NumCommits"] = compareInfo.Commits.Len() | ||||||
| 	ctx.Data["NumFiles"] = compareInfo.NumFiles | 	ctx.Data["NumFiles"] = compareInfo.NumFiles | ||||||
|  | 
 | ||||||
|  | 	if compareInfo.Commits.Len() != 0 { | ||||||
|  | 		sha := compareInfo.Commits.Front().Value.(*git.Commit).ID.String() | ||||||
|  | 		commitStatuses, err := models.GetLatestCommitStatus(ctx.Repo.Repository.ID, sha, models.ListOptions{}) | ||||||
|  | 		if err != nil { | ||||||
|  | 			ctx.ServerError("GetLatestCommitStatus", err) | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 		if len(commitStatuses) != 0 { | ||||||
|  | 			ctx.Data["LatestCommitStatuses"] = commitStatuses | ||||||
|  | 			ctx.Data["LatestCommitStatus"] = models.CalcCommitStatus(commitStatuses) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return compareInfo | 	return compareInfo | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ import ( | ||||||
| 	"bytes" | 	"bytes" | ||||||
| 	"context" | 	"context" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
|  | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  | @ -641,31 +642,27 @@ func GetCommitMessages(pr *models.PullRequest) string { | ||||||
| 
 | 
 | ||||||
| // GetLastCommitStatus returns the last commit status for this pull request.
 | // GetLastCommitStatus returns the last commit status for this pull request.
 | ||||||
| func GetLastCommitStatus(pr *models.PullRequest) (status *models.CommitStatus, err error) { | func GetLastCommitStatus(pr *models.PullRequest) (status *models.CommitStatus, err error) { | ||||||
| 	if err = pr.LoadHeadRepo(); err != nil { | 	if err = pr.LoadBaseRepo(); err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if pr.HeadRepo == nil { | 	gitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath()) | ||||||
| 		return nil, models.ErrPullRequestHeadRepoMissing{ID: pr.ID, HeadRepoID: pr.HeadRepoID} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath()) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 	defer headGitRepo.Close() | 	defer gitRepo.Close() | ||||||
| 
 | 
 | ||||||
| 	lastCommitID, err := headGitRepo.GetBranchCommitID(pr.HeadBranch) | 	compareInfo, err := gitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(), pr.MergeBase, pr.GetGitRefName()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	err = pr.LoadBaseRepo() | 	if compareInfo.Commits.Len() == 0 { | ||||||
| 	if err != nil { | 		return nil, errors.New("pull request has no commits") | ||||||
| 		return nil, err |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	statusList, err := models.GetLatestCommitStatus(pr.BaseRepo.ID, lastCommitID, models.ListOptions{}) | 	sha := compareInfo.Commits.Front().Value.(*git.Commit).ID.String() | ||||||
|  | 	statusList, err := models.GetLatestCommitStatus(pr.BaseRepo.ID, sha, models.ListOptions{}) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -1,19 +1,21 @@ | ||||||
| {{if $.LatestCommitStatus}} | {{if $.LatestCommitStatus}} | ||||||
|     <div class="ui top attached header"> |     {{if not $.Issue.PullRequest.HasMerged}} | ||||||
|          {{if eq .LatestCommitStatus.State "pending"}} |         <div class="ui top attached header"> | ||||||
|             {{$.i18n.Tr "repo.pulls.status_checking"}} |             {{if eq .LatestCommitStatus.State "pending"}} | ||||||
|         {{else if eq .LatestCommitStatus.State "success"}} |                 {{$.i18n.Tr "repo.pulls.status_checking"}} | ||||||
|             {{$.i18n.Tr "repo.pulls.status_checks_success"}} |             {{else if eq .LatestCommitStatus.State "success"}} | ||||||
|         {{else if eq .LatestCommitStatus.State "warning"}} |                 {{$.i18n.Tr "repo.pulls.status_checks_success"}} | ||||||
|             {{$.i18n.Tr "repo.pulls.status_checks_warning"}} |             {{else if eq .LatestCommitStatus.State "warning"}} | ||||||
|         {{else if eq .LatestCommitStatus.State "failure"}} |                 {{$.i18n.Tr "repo.pulls.status_checks_warning"}} | ||||||
|             {{$.i18n.Tr "repo.pulls.status_checks_failure"}} |             {{else if eq .LatestCommitStatus.State "failure"}} | ||||||
|         {{else if eq .LatestCommitStatus.State "error"}} |                 {{$.i18n.Tr "repo.pulls.status_checks_failure"}} | ||||||
|             {{$.i18n.Tr "repo.pulls.status_checks_error"}} |             {{else if eq .LatestCommitStatus.State "error"}} | ||||||
|         {{else}} |                 {{$.i18n.Tr "repo.pulls.status_checks_error"}} | ||||||
|             {{$.i18n.Tr "repo.pulls.status_checking"}} |             {{else}} | ||||||
|         {{end}} |                 {{$.i18n.Tr "repo.pulls.status_checking"}} | ||||||
|     </div> |             {{end}} | ||||||
|  |     	    </div> | ||||||
|  |     {{end}} | ||||||
| 
 | 
 | ||||||
|     {{range $.LatestCommitStatuses}} |     {{range $.LatestCommitStatuses}} | ||||||
|         <div class="ui attached segment"> |         <div class="ui attached segment"> | ||||||
|  | @ -21,7 +23,7 @@ | ||||||
|             <span class="ui">{{.Context}} <span class="text grey">{{.Description}}</span></span> |             <span class="ui">{{.Context}} <span class="text grey">{{.Description}}</span></span> | ||||||
|             <div class="ui right"> |             <div class="ui right"> | ||||||
|                 {{if $.is_context_required}} |                 {{if $.is_context_required}} | ||||||
|                     {{if (call $.is_context_required .Context)}}<div class="ui label">{{$.i18n.Tr "repo.pulls.status_checks_requested"}}</div>{{end}}  |                     {{if (call $.is_context_required .Context)}}<div class="ui label">{{$.i18n.Tr "repo.pulls.status_checks_requested"}}</div>{{end}} | ||||||
|                 {{end}} |                 {{end}} | ||||||
|                 <span class="ui">{{if .TargetURL}}<a href="{{.TargetURL}}">{{$.i18n.Tr "repo.pulls.status_checks_details"}}</a>{{end}}</span> |                 <span class="ui">{{if .TargetURL}}<a href="{{.TargetURL}}">{{$.i18n.Tr "repo.pulls.status_checks_details"}}</a>{{end}}</span> | ||||||
|             </div> |             </div> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue