Skip to content

Commit 318ef24

Browse files
committed
Delay conflict checking of PRs that had no update in last 24h until page load
1 parent c241859 commit 318ef24

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

routers/web/repo/issue.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,6 +1666,8 @@ func ViewIssue(ctx *context.Context) {
16661666
canDelete := false
16671667
ctx.Data["AllowMerge"] = false
16681668

1669+
pull_service.AddToTaskQueueOnView(pull)
1670+
16691671
if ctx.IsSigned {
16701672
if err := pull.LoadHeadRepo(ctx); err != nil {
16711673
log.Error("LoadHeadRepo: %v", err)

services/pull/check.go

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"fmt"
1111
"strconv"
1212
"strings"
13+
"time"
1314

1415
"code.gitea.io/gitea/models"
1516
"code.gitea.io/gitea/models/db"
@@ -43,20 +44,53 @@ var (
4344
)
4445

4546
// AddToTaskQueue adds itself to pull request test task queue.
46-
func AddToTaskQueue(pr *issues_model.PullRequest) {
47+
func setStatusChecking(pr *issues_model.PullRequest) bool {
4748
pr.Status = issues_model.PullRequestStatusChecking
4849
err := pr.UpdateColsIfNotMerged(db.DefaultContext, "status")
4950
if err != nil {
5051
log.Error("AddToTaskQueue(%-v).UpdateCols.(add to queue): %v", pr, err)
51-
return
52+
return false
5253
}
54+
return true
55+
}
56+
57+
func addToTaskQueue(pr *issues_model.PullRequest) {
5358
log.Trace("Adding %-v to the test pull requests queue", pr)
54-
err = prPatchCheckerQueue.Push(strconv.FormatInt(pr.ID, 10))
59+
err := prPatchCheckerQueue.Push(strconv.FormatInt(pr.ID, 10))
5560
if err != nil && err != queue.ErrAlreadyInQueue {
5661
log.Error("Error adding %-v to the test pull requests queue: %v", pr, err)
5762
}
5863
}
5964

65+
func AddToTaskQueueOnView(pr *issues_model.PullRequest) {
66+
if pr.Status == issues_model.PullRequestStatusChecking {
67+
addToTaskQueue(pr)
68+
}
69+
}
70+
71+
func AddToTaskQueueOnBaseUpdate(ctx context.Context, pr *issues_model.PullRequest) {
72+
// Blender: don't immediately check PRs older than a week, instead check when
73+
// the page is loaded.
74+
if !setStatusChecking(pr) {
75+
return
76+
}
77+
if err := pr.LoadIssue(ctx); err != nil {
78+
return
79+
}
80+
if pr.Issue.UpdatedUnix.AddDuration(24*time.Hour) < timeutil.TimeStampNow() {
81+
log.Trace("Delaying %-v patch checking because it was not updated recently", pr)
82+
return
83+
}
84+
85+
addToTaskQueue(pr)
86+
}
87+
88+
func AddToTaskQueue(pr *issues_model.PullRequest) {
89+
if setStatusChecking(pr) {
90+
addToTaskQueue(pr)
91+
}
92+
}
93+
6094
type MergeCheckType int
6195

6296
const (

services/pull/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ func AddTestPullRequestTask(doer *user_model.User, repoID int64, branch string,
342342
log.Error("UpdateCommitDivergence: %v", err)
343343
}
344344
}
345-
AddToTaskQueue(pr)
345+
AddToTaskQueueOnBaseUpdate(ctx, pr)
346346
}
347347
})
348348
}

0 commit comments

Comments
 (0)