summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-03-21 21:13:08 +0800
committerGitHub <noreply@github.com>2024-03-21 14:13:08 +0100
commit62f8174aa2fae1481c7e17a6afcb731a5b178cd0 (patch)
treef94686ea110e943418a25534e0306f45169c9f48 /routers
parent01500957c29f6bfa2396b8457dbb0645edaafa99 (diff)
downloadgitea-62f8174aa2fae1481c7e17a6afcb731a5b178cd0.tar.gz
gitea-62f8174aa2fae1481c7e17a6afcb731a5b178cd0.zip
Performance improvements for pull request list page (#29900)
This PR will avoid load pullrequest.Issue twice in pull request list page. It will reduce x times database queries for those WIP pull requests. Partially fix #29585 --------- Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/repo/issue.go5
-rw-r--r--routers/api/v1/repo/issue_pin.go16
-rw-r--r--routers/web/user/notification.go6
3 files changed, 14 insertions, 13 deletions
diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go
index 61a318baab..6934b34b24 100644
--- a/routers/api/v1/repo/issue.go
+++ b/routers/api/v1/repo/issue.go
@@ -872,10 +872,11 @@ func EditIssue(ctx *context.APIContext) {
}
if form.State != nil {
if issue.IsPull {
- if pr, err := issue.GetPullRequest(ctx); err != nil {
+ if err := issue.LoadPullRequest(ctx); err != nil {
ctx.Error(http.StatusInternalServerError, "GetPullRequest", err)
return
- } else if pr.HasMerged {
+ }
+ if issue.PullRequest.HasMerged {
ctx.Error(http.StatusPreconditionFailed, "MergedPRState", "cannot change state of this pull request, it was already merged")
return
}
diff --git a/routers/api/v1/repo/issue_pin.go b/routers/api/v1/repo/issue_pin.go
index ff1135862b..8fcf670fd0 100644
--- a/routers/api/v1/repo/issue_pin.go
+++ b/routers/api/v1/repo/issue_pin.go
@@ -240,18 +240,12 @@ func ListPinnedPullRequests(ctx *context.APIContext) {
}
apiPrs := make([]*api.PullRequest, len(issues))
+ if err := issues.LoadPullRequests(ctx); err != nil {
+ ctx.Error(http.StatusInternalServerError, "LoadPullRequests", err)
+ return
+ }
for i, currentIssue := range issues {
- pr, err := currentIssue.GetPullRequest(ctx)
- if err != nil {
- ctx.Error(http.StatusInternalServerError, "GetPullRequest", err)
- return
- }
-
- if err = pr.LoadIssue(ctx); err != nil {
- ctx.Error(http.StatusInternalServerError, "LoadIssue", err)
- return
- }
-
+ pr := currentIssue.PullRequest
if err = pr.LoadAttributes(ctx); err != nil {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return
diff --git a/routers/web/user/notification.go b/routers/web/user/notification.go
index 438462371b..28f9846d6b 100644
--- a/routers/web/user/notification.go
+++ b/routers/web/user/notification.go
@@ -144,6 +144,12 @@ func getNotifications(ctx *context.Context) {
ctx.ServerError("LoadIssues", err)
return
}
+
+ if err = notifications.LoadIssuePullRequests(ctx); err != nil {
+ ctx.ServerError("LoadIssuePullRequests", err)
+ return
+ }
+
notifications = notifications.Without(failures)
failCount += len(failures)