@@ -23,6 +23,7 @@ import (
2323 user_model "code.gitea.io/gitea/models/user"
2424 "code.gitea.io/gitea/modules/cache"
2525 "code.gitea.io/gitea/modules/git"
26+ "code.gitea.io/gitea/modules/globallock"
2627 "code.gitea.io/gitea/modules/httplib"
2728 "code.gitea.io/gitea/modules/log"
2829 "code.gitea.io/gitea/modules/references"
@@ -169,9 +170,6 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
169170 return fmt .Errorf ("unable to load head repo: %w" , err )
170171 }
171172
172- pullWorkingPool .CheckIn (fmt .Sprint (pr .ID ))
173- defer pullWorkingPool .CheckOut (fmt .Sprint (pr .ID ))
174-
175173 prUnit , err := pr .BaseRepo .GetUnit (ctx , unit .TypePullRequests )
176174 if err != nil {
177175 log .Error ("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v" , err )
@@ -184,11 +182,18 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
184182 return models.ErrInvalidMergeStyle {ID : pr .BaseRepo .ID , Style : mergeStyle }
185183 }
186184
185+ releaser , err := globallock .Lock (ctx , getPullWorkingLockKey (pr .ID ))
186+ if err != nil {
187+ log .Error ("lock.Lock(): %v" , err )
188+ return fmt .Errorf ("lock.Lock: %w" , err )
189+ }
190+ defer releaser ()
187191 defer func () {
188192 go AddTestPullRequestTask (doer , pr .BaseRepo .ID , pr .BaseBranch , false , "" , "" )
189193 }()
190194
191195 _ , err = doMergeAndPush (ctx , pr , doer , mergeStyle , expectedHeadCommitID , message , repo_module .PushTriggerPRMergeToBase )
196+ releaser ()
192197 if err != nil {
193198 return err
194199 }
@@ -487,10 +492,14 @@ func CheckPullBranchProtections(ctx context.Context, pr *issues_model.PullReques
487492
488493// MergedManually mark pr as merged manually
489494func MergedManually (ctx context.Context , pr * issues_model.PullRequest , doer * user_model.User , baseGitRepo * git.Repository , commitID string ) error {
490- pullWorkingPool .CheckIn (fmt .Sprint (pr .ID ))
491- defer pullWorkingPool .CheckOut (fmt .Sprint (pr .ID ))
495+ releaser , err := globallock .Lock (ctx , getPullWorkingLockKey (pr .ID ))
496+ if err != nil {
497+ log .Error ("lock.Lock(): %v" , err )
498+ return fmt .Errorf ("lock.Lock: %w" , err )
499+ }
500+ defer releaser ()
492501
493- if err : = db .WithTx (ctx , func (ctx context.Context ) error {
502+ err = db .WithTx (ctx , func (ctx context.Context ) error {
494503 if err := pr .LoadBaseRepo (ctx ); err != nil {
495504 return err
496505 }
@@ -540,7 +549,9 @@ func MergedManually(ctx context.Context, pr *issues_model.PullRequest, doer *use
540549 return fmt .Errorf ("SetMerged failed" )
541550 }
542551 return nil
543- }); err != nil {
552+ })
553+ releaser ()
554+ if err != nil {
544555 return err
545556 }
546557
0 commit comments