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:
Cirno the Strongest 2020-12-18 13:37:55 +01:00 committed by GitHub
parent 48bd02e753
commit efa9a8a6e3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 28 deletions

View file

@ -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
} }

View file

@ -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
} }

View file

@ -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>