Skip to content

Commit 1f7837d

Browse files
authored
Refactor for issues loadattributes of a repository (#971)
* refactor for issues loadattributes of a repository * refactors
1 parent 29c6f32 commit 1f7837d

File tree

3 files changed

+343
-64
lines changed

3 files changed

+343
-64
lines changed

models/helper.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright 2017 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package models
6+
7+
func keysInt64(m map[int64]struct{}) []int64 {
8+
var keys = make([]int64, 0, len(m))
9+
for k, _ := range m {
10+
keys = append(keys, k)
11+
}
12+
return keys
13+
}
14+
15+
func valuesRepository(m map[int64]*Repository) []*Repository {
16+
var values = make([]*Repository, 0, len(m))
17+
for _, v := range m {
18+
values = append(values, v)
19+
}
20+
return values
21+
}

models/issue.go

Lines changed: 2 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,11 +1128,8 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) {
11281128
return nil, fmt.Errorf("Find: %v", err)
11291129
}
11301130

1131-
// FIXME: use IssueList to improve performance.
1132-
for i := range issues {
1133-
if err := issues[i].LoadAttributes(); err != nil {
1134-
return nil, fmt.Errorf("LoadAttributes [%d]: %v", issues[i].ID, err)
1135-
}
1131+
if err := IssueList(issues).LoadAttributes(); err != nil {
1132+
return nil, fmt.Errorf("LoadAttributes: %v", err)
11361133
}
11371134

11381135
return issues, nil
@@ -1399,62 +1396,3 @@ func updateIssue(e Engine, issue *Issue) error {
13991396
func UpdateIssue(issue *Issue) error {
14001397
return updateIssue(x, issue)
14011398
}
1402-
1403-
// IssueList defines a list of issues
1404-
type IssueList []*Issue
1405-
1406-
func (issues IssueList) getRepoIDs() []int64 {
1407-
repoIDs := make([]int64, 0, len(issues))
1408-
for _, issue := range issues {
1409-
var has bool
1410-
for _, repoID := range repoIDs {
1411-
if repoID == issue.RepoID {
1412-
has = true
1413-
break
1414-
}
1415-
}
1416-
if !has {
1417-
repoIDs = append(repoIDs, issue.RepoID)
1418-
}
1419-
}
1420-
return repoIDs
1421-
}
1422-
1423-
func (issues IssueList) loadRepositories(e Engine) ([]*Repository, error) {
1424-
if len(issues) == 0 {
1425-
return nil, nil
1426-
}
1427-
1428-
repoIDs := issues.getRepoIDs()
1429-
rows, err := e.
1430-
Where("id > 0").
1431-
In("id", repoIDs).
1432-
Rows(new(Repository))
1433-
if err != nil {
1434-
return nil, fmt.Errorf("find repository: %v", err)
1435-
}
1436-
defer rows.Close()
1437-
1438-
repositories := make([]*Repository, 0, len(repoIDs))
1439-
repoMaps := make(map[int64]*Repository, len(repoIDs))
1440-
for rows.Next() {
1441-
var repo Repository
1442-
err = rows.Scan(&repo)
1443-
if err != nil {
1444-
return nil, fmt.Errorf("find repository: %v", err)
1445-
}
1446-
1447-
repositories = append(repositories, &repo)
1448-
repoMaps[repo.ID] = &repo
1449-
}
1450-
1451-
for _, issue := range issues {
1452-
issue.Repo = repoMaps[issue.RepoID]
1453-
}
1454-
return repositories, nil
1455-
}
1456-
1457-
// LoadRepositories loads issues' all repositories
1458-
func (issues IssueList) LoadRepositories() ([]*Repository, error) {
1459-
return issues.loadRepositories(x)
1460-
}

0 commit comments

Comments
 (0)