aboutsummaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-05-31 20:10:11 +0800
committerGitHub <noreply@github.com>2024-05-31 12:10:11 +0000
commit352a2cae247afa254241f113c5c22b9351f116b9 (patch)
tree94fdec54ff4e2cbfa88152e4f8d60e6a8bc30a1f /routers
parent972f807ee7d0643b93a776d362ecefc3d5433048 (diff)
downloadgitea-352a2cae247afa254241f113c5c22b9351f116b9.tar.gz
gitea-352a2cae247afa254241f113c5c22b9351f116b9.zip
Performance improvements for pull request list API (#30490)
Fix #30483 --------- Co-authored-by: yp05327 <576951401@qq.com> Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/repo/pull.go48
1 files changed, 32 insertions, 16 deletions
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index a9aa5c4d8e..4014fe80f3 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -116,23 +116,39 @@ func ListPullRequests(ctx *context.APIContext) {
}
apiPrs := make([]*api.PullRequest, len(prs))
+ // NOTE: load repository first, so that issue.Repo will be filled with pr.BaseRepo
+ if err := prs.LoadRepositories(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadRepositories", err)
+ return
+ }
+ issueList, err := prs.LoadIssues(ctx)
+ if err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadIssues", err)
+ return
+ }
+
+ if err := issueList.LoadLabels(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadLabels", err)
+ return
+ }
+ if err := issueList.LoadPosters(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadPoster", err)
+ return
+ }
+ if err := issueList.LoadAttachments(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadAttachments", err)
+ return
+ }
+ if err := issueList.LoadMilestones(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadMilestones", err)
+ return
+ }
+ if err := issueList.LoadAssignees(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadAssignees", err)
+ return
+ }
+
for i := range prs {
- if err = prs[i].LoadIssue(ctx); err != nil {
- ctx.Error(http.StatusInternalServerError, "LoadIssue", err)
- return
- }
- if err = prs[i].LoadAttributes(ctx); err != nil {
- ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
- return
- }
- if err = prs[i].LoadBaseRepo(ctx); err != nil {
- ctx.Error(http.StatusInternalServerError, "LoadBaseRepo", err)
- return
- }
- if err = prs[i].LoadHeadRepo(ctx); err != nil {
- ctx.Error(http.StatusInternalServerError, "LoadHeadRepo", err)
- return
- }
apiPrs[i] = convert.ToAPIPullRequest(ctx, prs[i], ctx.Doer)
}