@@ -22,23 +22,21 @@ import (
2222	"code.gitea.io/gitea/modules/log" 
2323	"code.gitea.io/gitea/modules/process" 
2424	"code.gitea.io/gitea/modules/queue" 
25+ 	"code.gitea.io/gitea/services/automergequeue" 
2526	notify_service "code.gitea.io/gitea/services/notify" 
2627	pull_service "code.gitea.io/gitea/services/pull" 
2728	repo_service "code.gitea.io/gitea/services/repository" 
2829)
2930
30- // prAutoMergeQueue represents a queue to handle update pull request tests 
31- var  prAutoMergeQueue  * queue.WorkerPoolQueue [string ]
32- 
3331// Init runs the task queue to that handles auto merges 
3432func  Init () error  {
3533	notify_service .RegisterNotifier (NewNotifier ())
3634
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  {
3937		return  errors .New ("unable to create pr_auto_merge queue" )
4038	}
41- 	go  graceful .GetManager ().RunWithCancel (prAutoMergeQueue )
39+ 	go  graceful .GetManager ().RunWithCancel (automergequeue . AutoMergeQueue )
4240	return  nil 
4341}
4442
@@ -56,24 +54,23 @@ func handler(items ...string) []string {
5654	return  nil 
5755}
5856
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- 
6657// ScheduleAutoMerge if schedule is false and no error, pull can be merged directly 
6758func  ScheduleAutoMerge (ctx  context.Context , doer  * user_model.User , pull  * issues_model.PullRequest , style  repo_model.MergeStyle , message  string , deleteBranchAfterMerge  bool ) (scheduled  bool , err  error ) {
6859	err  =  db .WithTx (ctx , func (ctx  context.Context ) error  {
6960		if  err  :=  pull_model .ScheduleAutoMerge (ctx , doer , pull .ID , style , message , deleteBranchAfterMerge ); err  !=  nil  {
7061			return  err 
7162		}
72- 		scheduled  =  true 
73- 
7463		_ , err  =  issues_model .CreateAutoMergeComment (ctx , issues_model .CommentTypePRScheduledToAutoMerge , pull , doer )
7564		return  err 
7665	})
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+ 	}
7774	return  scheduled , err 
7875}
7976
@@ -99,38 +96,12 @@ func StartPRCheckAndAutoMergeBySHA(ctx context.Context, sha string, repo *repo_m
9996	}
10097
10198	for  _ , pr  :=  range  pulls  {
102- 		addToQueue (pr , sha )
99+ 		automergequeue . AddToQueue (pr , sha )
103100	}
104101
105102	return  nil 
106103}
107104
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- 
134105func  getPullRequestsByHeadSHA (ctx  context.Context , sha  string , repo  * repo_model.Repository , filter  func (* issues_model.PullRequest ) bool ) (map [int64 ]* issues_model.PullRequest , error ) {
135106	gitRepo , err  :=  gitrepo .OpenRepository (ctx , repo )
136107	if  err  !=  nil  {
0 commit comments