summaryrefslogtreecommitdiffstats
path: root/models/issues
diff options
context:
space:
mode:
authoraceArt-GmbH <33117017+aceArt-GmbH@users.noreply.github.com>2022-07-26 15:42:23 +0200
committerGitHub <noreply@github.com>2022-07-26 15:42:23 +0200
commited6cd3cbb7cf42086ddb049a22b8f4604f445113 (patch)
tree91e86e315f8a3b61b1caade1ee5a205155f796f4 /models/issues
parent4fc53a3f30f6c71325b01654019c28c334271109 (diff)
downloadgitea-ed6cd3cbb7cf42086ddb049a22b8f4604f445113.tar.gz
gitea-ed6cd3cbb7cf42086ddb049a22b8f4604f445113.zip
Display project in issue list (#20434)
Co-authored-by: lukas <lukas.walter@aceart.de>
Diffstat (limited to 'models/issues')
-rw-r--r--models/issues/issue_list.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/models/issues/issue_list.go b/models/issues/issue_list.go
index e311e80b1d..874f2a6368 100644
--- a/models/issues/issue_list.go
+++ b/models/issues/issue_list.go
@@ -9,6 +9,7 @@ import (
"fmt"
"code.gitea.io/gitea/models/db"
+ project_model "code.gitea.io/gitea/models/project"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/container"
@@ -222,6 +223,46 @@ func (issues IssueList) loadMilestones(ctx context.Context) error {
return nil
}
+func (issues IssueList) getProjectIDs() []int64 {
+ ids := make(map[int64]struct{}, len(issues))
+ for _, issue := range issues {
+ projectID := issue.ProjectID()
+ if _, ok := ids[projectID]; !ok {
+ ids[projectID] = struct{}{}
+ }
+ }
+ return container.KeysInt64(ids)
+}
+
+func (issues IssueList) loadProjects(ctx context.Context) error {
+ projectIDs := issues.getProjectIDs()
+ if len(projectIDs) == 0 {
+ return nil
+ }
+
+ projectMaps := make(map[int64]*project_model.Project, len(projectIDs))
+ left := len(projectIDs)
+ for left > 0 {
+ limit := db.DefaultMaxInSize
+ if left < limit {
+ limit = left
+ }
+ err := db.GetEngine(ctx).
+ In("id", projectIDs[:limit]).
+ Find(&projectMaps)
+ if err != nil {
+ return err
+ }
+ left -= limit
+ projectIDs = projectIDs[limit:]
+ }
+
+ for _, issue := range issues {
+ issue.Project = projectMaps[issue.ProjectID()]
+ }
+ return nil
+}
+
func (issues IssueList) loadAssignees(ctx context.Context) error {
if len(issues) == 0 {
return nil
@@ -495,6 +536,10 @@ func (issues IssueList) loadAttributes(ctx context.Context) error {
return fmt.Errorf("issue.loadAttributes: loadMilestones: %v", err)
}
+ if err := issues.loadProjects(ctx); err != nil {
+ return fmt.Errorf("issue.loadAttributes: loadProjects: %v", err)
+ }
+
if err := issues.loadAssignees(ctx); err != nil {
return fmt.Errorf("issue.loadAttributes: loadAssignees: %v", err)
}