diff options
author | aceArt-GmbH <33117017+aceArt-GmbH@users.noreply.github.com> | 2022-07-26 15:42:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-26 15:42:23 +0200 |
commit | ed6cd3cbb7cf42086ddb049a22b8f4604f445113 (patch) | |
tree | 91e86e315f8a3b61b1caade1ee5a205155f796f4 /models/issues | |
parent | 4fc53a3f30f6c71325b01654019c28c334271109 (diff) | |
download | gitea-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.go | 45 |
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) } |