@@ -23,6 +23,7 @@ import (
23
23
user_model "code.gitea.io/gitea/models/user"
24
24
"code.gitea.io/gitea/modules/cache"
25
25
"code.gitea.io/gitea/modules/git"
26
+ "code.gitea.io/gitea/modules/globallock"
26
27
"code.gitea.io/gitea/modules/httplib"
27
28
"code.gitea.io/gitea/modules/log"
28
29
"code.gitea.io/gitea/modules/references"
@@ -169,9 +170,6 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
169
170
return fmt .Errorf ("unable to load head repo: %w" , err )
170
171
}
171
172
172
- pullWorkingPool .CheckIn (fmt .Sprint (pr .ID ))
173
- defer pullWorkingPool .CheckOut (fmt .Sprint (pr .ID ))
174
-
175
173
prUnit , err := pr .BaseRepo .GetUnit (ctx , unit .TypePullRequests )
176
174
if err != nil {
177
175
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
184
182
return models.ErrInvalidMergeStyle {ID : pr .BaseRepo .ID , Style : mergeStyle }
185
183
}
186
184
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 ()
187
191
defer func () {
188
192
go AddTestPullRequestTask (doer , pr .BaseRepo .ID , pr .BaseBranch , false , "" , "" )
189
193
}()
190
194
191
195
_ , err = doMergeAndPush (ctx , pr , doer , mergeStyle , expectedHeadCommitID , message , repo_module .PushTriggerPRMergeToBase )
196
+ releaser ()
192
197
if err != nil {
193
198
return err
194
199
}
@@ -487,10 +492,14 @@ func CheckPullBranchProtections(ctx context.Context, pr *issues_model.PullReques
487
492
488
493
// MergedManually mark pr as merged manually
489
494
func 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 ()
492
501
493
- if err : = db .WithTx (ctx , func (ctx context.Context ) error {
502
+ err = db .WithTx (ctx , func (ctx context.Context ) error {
494
503
if err := pr .LoadBaseRepo (ctx ); err != nil {
495
504
return err
496
505
}
@@ -540,7 +549,9 @@ func MergedManually(ctx context.Context, pr *issues_model.PullRequest, doer *use
540
549
return fmt .Errorf ("SetMerged failed" )
541
550
}
542
551
return nil
543
- }); err != nil {
552
+ })
553
+ releaser ()
554
+ if err != nil {
544
555
return err
545
556
}
546
557
0 commit comments