@@ -28,6 +28,7 @@ import (
2828 user_model "code.gitea.io/gitea/models/user"
2929 "code.gitea.io/gitea/modules/cache"
3030 "code.gitea.io/gitea/modules/git"
31+ "code.gitea.io/gitea/modules/graceful"
3132 "code.gitea.io/gitea/modules/log"
3233 "code.gitea.io/gitea/modules/notification"
3334 "code.gitea.io/gitea/modules/references"
@@ -165,9 +166,10 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
165166 go AddTestPullRequestTask (doer , pr .BaseRepo .ID , pr .BaseBranch , false , "" , "" )
166167 }()
167168
168- // TODO: make it able to do this in a database session
169- mergeCtx := context .Background ()
170- pr .MergedCommitID , err = rawMerge (mergeCtx , pr , doer , mergeStyle , expectedHeadCommitID , message )
169+ // Run the merge in the hammer context to prevent cancellation
170+ hammerCtx := graceful .GetManager ().HammerContext ()
171+
172+ pr .MergedCommitID , err = rawMerge (hammerCtx , pr , doer , mergeStyle , expectedHeadCommitID , message )
171173 if err != nil {
172174 return err
173175 }
@@ -176,18 +178,18 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
176178 pr .Merger = doer
177179 pr .MergerID = doer .ID
178180
179- if _ , err := pr .SetMerged (ctx ); err != nil {
181+ if _ , err := pr .SetMerged (hammerCtx ); err != nil {
180182 log .Error ("setMerged [%d]: %v" , pr .ID , err )
181183 }
182184
183- if err := pr .LoadIssueCtx (ctx ); err != nil {
185+ if err := pr .LoadIssueCtx (hammerCtx ); err != nil {
184186 log .Error ("loadIssue [%d]: %v" , pr .ID , err )
185187 }
186188
187- if err := pr .Issue .LoadRepo (ctx ); err != nil {
189+ if err := pr .Issue .LoadRepo (hammerCtx ); err != nil {
188190 log .Error ("loadRepo for issue [%d]: %v" , pr .ID , err )
189191 }
190- if err := pr .Issue .Repo .GetOwner (ctx ); err != nil {
192+ if err := pr .Issue .Repo .GetOwner (hammerCtx ); err != nil {
191193 log .Error ("GetOwner for issue repo [%d]: %v" , pr .ID , err )
192194 }
193195
@@ -197,17 +199,17 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
197199 cache .Remove (pr .Issue .Repo .GetCommitsCountCacheKey (pr .BaseBranch , true ))
198200
199201 // Resolve cross references
200- refs , err := pr .ResolveCrossReferences (ctx )
202+ refs , err := pr .ResolveCrossReferences (hammerCtx )
201203 if err != nil {
202204 log .Error ("ResolveCrossReferences: %v" , err )
203205 return nil
204206 }
205207
206208 for _ , ref := range refs {
207- if err = ref .LoadIssueCtx (ctx ); err != nil {
209+ if err = ref .LoadIssueCtx (hammerCtx ); err != nil {
208210 return err
209211 }
210- if err = ref .Issue .LoadRepo (ctx ); err != nil {
212+ if err = ref .Issue .LoadRepo (hammerCtx ); err != nil {
211213 return err
212214 }
213215 close := ref .RefAction == references .XRefActionCloses
0 commit comments