@@ -22,23 +22,21 @@ import (
22
22
"code.gitea.io/gitea/modules/log"
23
23
"code.gitea.io/gitea/modules/process"
24
24
"code.gitea.io/gitea/modules/queue"
25
+ "code.gitea.io/gitea/services/automergequeue"
25
26
notify_service "code.gitea.io/gitea/services/notify"
26
27
pull_service "code.gitea.io/gitea/services/pull"
27
28
repo_service "code.gitea.io/gitea/services/repository"
28
29
)
29
30
30
- // prAutoMergeQueue represents a queue to handle update pull request tests
31
- var prAutoMergeQueue * queue.WorkerPoolQueue [string ]
32
-
33
31
// Init runs the task queue to that handles auto merges
34
32
func Init () error {
35
33
notify_service .RegisterNotifier (NewNotifier ())
36
34
37
- prAutoMergeQueue = queue .CreateUniqueQueue (graceful .GetManager ().ShutdownContext (), "pr_auto_merge" , handler )
38
- if prAutoMergeQueue == nil {
35
+ automergequeue . AutoMergeQueue = queue .CreateUniqueQueue (graceful .GetManager ().ShutdownContext (), "pr_auto_merge" , handler )
36
+ if automergequeue . AutoMergeQueue == nil {
39
37
return errors .New ("unable to create pr_auto_merge queue" )
40
38
}
41
- go graceful .GetManager ().RunWithCancel (prAutoMergeQueue )
39
+ go graceful .GetManager ().RunWithCancel (automergequeue . AutoMergeQueue )
42
40
return nil
43
41
}
44
42
@@ -56,24 +54,23 @@ func handler(items ...string) []string {
56
54
return nil
57
55
}
58
56
59
- func addToQueue (pr * issues_model.PullRequest , sha string ) {
60
- log .Trace ("Adding pullID: %d to the pull requests patch checking queue with sha %s" , pr .ID , sha )
61
- if err := prAutoMergeQueue .Push (fmt .Sprintf ("%d_%s" , pr .ID , sha )); err != nil {
62
- log .Error ("Error adding pullID: %d to the pull requests patch checking queue %v" , pr .ID , err )
63
- }
64
- }
65
-
66
57
// ScheduleAutoMerge if schedule is false and no error, pull can be merged directly
67
58
func ScheduleAutoMerge (ctx context.Context , doer * user_model.User , pull * issues_model.PullRequest , style repo_model.MergeStyle , message string , deleteBranchAfterMerge bool ) (scheduled bool , err error ) {
68
59
err = db .WithTx (ctx , func (ctx context.Context ) error {
69
60
if err := pull_model .ScheduleAutoMerge (ctx , doer , pull .ID , style , message , deleteBranchAfterMerge ); err != nil {
70
61
return err
71
62
}
72
- scheduled = true
73
-
74
63
_ , err = issues_model .CreateAutoMergeComment (ctx , issues_model .CommentTypePRScheduledToAutoMerge , pull , doer )
75
64
return err
76
65
})
66
+ // Old code made "scheduled" to be true after "ScheduleAutoMerge", but it's not right:
67
+ // If the transaction rolls back, then the pull request is not scheduled to auto merge.
68
+ // So we should only set "scheduled" to true if there is no error.
69
+ scheduled = err == nil
70
+ if scheduled {
71
+ log .Trace ("Pull request [%d] scheduled for auto merge with style [%s] and message [%s]" , pull .ID , style , message )
72
+ automergequeue .StartPRCheckAndAutoMerge (ctx , pull )
73
+ }
77
74
return scheduled , err
78
75
}
79
76
@@ -99,38 +96,12 @@ func StartPRCheckAndAutoMergeBySHA(ctx context.Context, sha string, repo *repo_m
99
96
}
100
97
101
98
for _ , pr := range pulls {
102
- addToQueue (pr , sha )
99
+ automergequeue . AddToQueue (pr , sha )
103
100
}
104
101
105
102
return nil
106
103
}
107
104
108
- // StartPRCheckAndAutoMerge start an automerge check and auto merge task for a pull request
109
- func StartPRCheckAndAutoMerge (ctx context.Context , pull * issues_model.PullRequest ) {
110
- if pull == nil || pull .HasMerged || ! pull .CanAutoMerge () {
111
- return
112
- }
113
-
114
- if err := pull .LoadBaseRepo (ctx ); err != nil {
115
- log .Error ("LoadBaseRepo: %v" , err )
116
- return
117
- }
118
-
119
- gitRepo , err := gitrepo .OpenRepository (ctx , pull .BaseRepo )
120
- if err != nil {
121
- log .Error ("OpenRepository: %v" , err )
122
- return
123
- }
124
- defer gitRepo .Close ()
125
- commitID , err := gitRepo .GetRefCommitID (pull .GetGitRefName ())
126
- if err != nil {
127
- log .Error ("GetRefCommitID: %v" , err )
128
- return
129
- }
130
-
131
- addToQueue (pull , commitID )
132
- }
133
-
134
105
func getPullRequestsByHeadSHA (ctx context.Context , sha string , repo * repo_model.Repository , filter func (* issues_model.PullRequest ) bool ) (map [int64 ]* issues_model.PullRequest , error ) {
135
106
gitRepo , err := gitrepo .OpenRepository (ctx , repo )
136
107
if err != nil {
0 commit comments