Skip to content

Commit 651dbdb

Browse files
committed
Add status popup to issue list
This gets the necessary data to the issuelist for it to support a clickable commit status icon which pops up the full list of commit statuses related to the commit. It accomplishes this without any additional queries or fetching as the existing codepath was already doing the necessary work but only returning the "last" status. All methods were wrapped to call the least-filtered version of each function in order to maximize code reuse.
1 parent d139c23 commit 651dbdb

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

routers/web/repo/issue.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,17 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti
269269
}
270270
}
271271

272-
commitStatus, err := pull_service.GetIssuesLastCommitStatus(ctx, issues)
272+
commitStatuses, lastStatus, err := pull_service.GetIssuesAllCommitStatus(ctx, issues)
273273
if err != nil {
274-
ctx.ServerError("GetIssuesLastCommitStatus", err)
274+
ctx.ServerError("GetIssuesAllCommitStatus", err)
275275
return
276276
}
277277

278278
ctx.Data["Issues"] = issues
279-
ctx.Data["CommitStatus"] = commitStatus
279+
ctx.Data["CommitStatuses"] = map[string]interface{}{
280+
"Status": lastStatus,
281+
"Statuses": commitStatuses,
282+
}
280283

281284
// Get assignees.
282285
ctx.Data["Assignees"], err = models.GetRepoAssignees(repo)

services/pull/pull.go

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -728,16 +728,23 @@ func GetSquashMergeCommitMessages(ctx context.Context, pr *models.PullRequest) s
728728

729729
// GetIssuesLastCommitStatus returns a map
730730
func GetIssuesLastCommitStatus(ctx context.Context, issues models.IssueList) (map[int64]*models.CommitStatus, error) {
731+
_, lastStatus, err := GetIssuesAllCommitStatus(ctx, issues)
732+
return lastStatus, err
733+
}
734+
735+
// GetIssuesAllCommitStatus returns a map
736+
func GetIssuesAllCommitStatus(ctx context.Context, issues models.IssueList) (map[int64][]*models.CommitStatus, map[int64]*models.CommitStatus, error) {
731737
if err := issues.LoadPullRequests(); err != nil {
732-
return nil, err
738+
return nil, nil, err
733739
}
734740
if _, err := issues.LoadRepositories(); err != nil {
735-
return nil, err
741+
return nil, nil, err
736742
}
737743

738744
var (
739745
gitRepos = make(map[int64]*git.Repository)
740-
res = make(map[int64]*models.CommitStatus)
746+
res = make(map[int64][]*models.CommitStatus)
747+
lastRes = make(map[int64]*models.CommitStatus)
741748
err error
742749
)
743750
defer func() {
@@ -760,28 +767,33 @@ func GetIssuesLastCommitStatus(ctx context.Context, issues models.IssueList) (ma
760767
gitRepos[issue.RepoID] = gitRepo
761768
}
762769

763-
status, err := getLastCommitStatus(gitRepo, issue.PullRequest)
770+
statuses, lastStatus, err := getAllCommitStatus(gitRepo, issue.PullRequest)
764771
if err != nil {
765-
log.Error("getLastCommitStatus: cant get last commit of pull [%d]: %v", issue.PullRequest.ID, err)
772+
log.Error("getAllCommitStatus: cant get commit statuses of pull [%d]: %v", issue.PullRequest.ID, err)
766773
continue
767774
}
768-
res[issue.PullRequest.ID] = status
775+
res[issue.PullRequest.ID] = statuses
776+
lastRes[issue.PullRequest.ID] = lastStatus
769777
}
770-
return res, nil
778+
return res, lastRes, nil
771779
}
772780

773781
// getLastCommitStatus get pr's last commit status. PR's last commit status is the head commit id's last commit status
774782
func getLastCommitStatus(gitRepo *git.Repository, pr *models.PullRequest) (status *models.CommitStatus, err error) {
775-
sha, err := gitRepo.GetRefCommitID(pr.GetGitRefName())
776-
if err != nil {
777-
return nil, err
778-
}
783+
_, lastStatus, err := getAllCommitStatus(gitRepo, pr)
784+
return lastStatus, err
785+
}
779786

780-
statusList, _, err := models.GetLatestCommitStatus(pr.BaseRepo.ID, sha, db.ListOptions{})
781-
if err != nil {
782-
return nil, err
787+
// getAllCommitStatus get pr's commit statuses.
788+
func getAllCommitStatus(gitRepo *git.Repository, pr *models.PullRequest) (statuses []*models.CommitStatus, lastStatus *models.CommitStatus, err error) {
789+
sha, shaErr := gitRepo.GetRefCommitID(pr.GetGitRefName())
790+
if shaErr != nil {
791+
return nil, nil, shaErr
783792
}
784-
return models.CalcCommitStatus(statusList), nil
793+
794+
statuses, _, err = models.GetLatestCommitStatus(pr.BaseRepo.ID, sha, db.ListOptions{})
795+
lastStatus = models.CalcCommitStatus(statuses)
796+
return statuses, lastStatus, err
785797
}
786798

787799
// IsHeadEqualWithBranch returns if the commits of branchName are available in pull request head

templates/shared/issuelist.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<a class="title tdn" href="{{if .HTMLURL}}{{.HTMLURL}}{{else}}{{$.Link}}/{{.Index}}{{end}}">{{RenderEmoji .Title}}</a>
3535
{{if .IsPull}}
3636
{{if (index $.CommitStatus .PullRequest.ID)}}
37-
{{template "repo/commit_status" (index $.CommitStatus .PullRequest.ID)}}
37+
{{template "repo/commit_statuses" (index $.CommitStatuses .PullRequest.ID)}}
3838
{{end}}
3939
{{end}}
4040
<span class="labels-list ml-2">

0 commit comments

Comments
 (0)