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>
|
||||||
|
|
Reference in a new issue