Skip to content

Show status check for merged PRs #13975

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Dec 18, 2020
14 changes: 14 additions & 0 deletions routers/repo/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,20 @@ func PrepareMergedViewPullInfo(ctx *context.Context, issue *models.Issue) *git.C
}
ctx.Data["NumCommits"] = compareInfo.Commits.Len()
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, sha, 0)
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
}

Expand Down
21 changes: 9 additions & 12 deletions services/pull/pull.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"strings"
"time"
Expand Down Expand Up @@ -641,31 +642,27 @@ func GetCommitMessages(pr *models.PullRequest) string {

// GetLastCommitStatus returns the last commit status for this pull request.
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
}

if pr.HeadRepo == nil {
return nil, models.ErrPullRequestHeadRepoMissing{ID: pr.ID, HeadRepoID: pr.HeadRepoID}
}

headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath())
gitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath())
if err != nil {
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 {
return nil, err
}

err = pr.LoadBaseRepo()
if err != nil {
return nil, err
if compareInfo.Commits.Len() == 0 {
return nil, errors.New("pull request has no commits")
}

statusList, err := models.GetLatestCommitStatus(pr.BaseRepo, lastCommitID, 0)
sha := compareInfo.Commits.Front().Value.(*git.Commit).ID.String()
statusList, err := models.GetLatestCommitStatus(pr.BaseRepo, sha, 0)
if err != nil {
return nil, err
}
Expand Down
34 changes: 18 additions & 16 deletions templates/repo/pulls/status.tmpl
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
{{if $.LatestCommitStatus}}
<div class="ui top attached header">
{{if eq .LatestCommitStatus.State "pending"}}
{{$.i18n.Tr "repo.pulls.status_checking"}}
{{else if eq .LatestCommitStatus.State "success"}}
{{$.i18n.Tr "repo.pulls.status_checks_success"}}
{{else if eq .LatestCommitStatus.State "warning"}}
{{$.i18n.Tr "repo.pulls.status_checks_warning"}}
{{else if eq .LatestCommitStatus.State "failure"}}
{{$.i18n.Tr "repo.pulls.status_checks_failure"}}
{{else if eq .LatestCommitStatus.State "error"}}
{{$.i18n.Tr "repo.pulls.status_checks_error"}}
{{else}}
{{$.i18n.Tr "repo.pulls.status_checking"}}
{{end}}
</div>
{{if not $.Issue.PullRequest.HasMerged}}
<div class="ui top attached header">
{{if eq .LatestCommitStatus.State "pending"}}
{{$.i18n.Tr "repo.pulls.status_checking"}}
{{else if eq .LatestCommitStatus.State "success"}}
{{$.i18n.Tr "repo.pulls.status_checks_success"}}
{{else if eq .LatestCommitStatus.State "warning"}}
{{$.i18n.Tr "repo.pulls.status_checks_warning"}}
{{else if eq .LatestCommitStatus.State "failure"}}
{{$.i18n.Tr "repo.pulls.status_checks_failure"}}
{{else if eq .LatestCommitStatus.State "error"}}
{{$.i18n.Tr "repo.pulls.status_checks_error"}}
{{else}}
{{$.i18n.Tr "repo.pulls.status_checking"}}
{{end}}
</div>
{{end}}

{{range $.LatestCommitStatuses}}
<div class="ui attached segment">
<span>{{template "repo/commit_status" .}}</span>
<span class="ui">{{.Context}} <span class="text grey">{{.Description}}</span></span>
<div class="ui right">
{{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}}
<span class="ui">{{if .TargetURL}}<a href="{{.TargetURL}}">{{$.i18n.Tr "repo.pulls.status_checks_details"}}</a>{{end}}</span>
</div>
Expand Down