From 16adc83852a24c28a00b6bd7bd7e43eae4d86d83 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 1 May 2024 21:54:27 +0800 Subject: [PATCH] Reload pull request after pushing --- services/pull/merge.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/pull/merge.go b/services/pull/merge.go index 4891e758c7..66c947040e 100644 --- a/services/pull/merge.go +++ b/services/pull/merge.go @@ -182,6 +182,12 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U return err } + // reload pull request because it has been updated by post receive hook + pr, err = issues_model.GetPullRequestByID(ctx, pr.ID) + if err != nil { + return err + } + if err := pr.LoadIssue(ctx); err != nil { log.Error("LoadIssue %-v: %v", pr, err) } @@ -311,8 +317,8 @@ func doMergeAndPush(ctx context.Context, pr *issues_model.PullRequest, doer *use pushCmd := git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch) // Push back to upstream. - // TODO: this cause an api call to "/api/internal/hook/post-receive/...", - // that prevents us from doint the whole merge in one db transaction + // This cause an api call to "/api/internal/hook/post-receive/...", + // If it's merge, all db transaction and operations should be there but not here to prevent deadlock. if err := pushCmd.Run(mergeCtx.RunOpts()); err != nil { if strings.Contains(mergeCtx.errbuf.String(), "non-fast-forward") { return "", &git.ErrPushOutOfDate{