Skip to content

Commit 3e320f8

Browse files
committed
Follow wxiaoguang's suggestion
1 parent 45c5449 commit 3e320f8

File tree

6 files changed

+52
-51
lines changed

6 files changed

+52
-51
lines changed

cmd/hook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ Gitea or set your environment appropriately.`, "")
352352
GitQuarantinePath: os.Getenv(private.GitQuarantinePath),
353353
GitPushOptions: pushOptions(),
354354
PullRequestID: prID,
355-
PullRequestAction: os.Getenv(repo_module.EnvPRAction),
355+
PushTrigger: os.Getenv(repo_module.EnvPushTrigger),
356356
}
357357
oldCommitIDs := make([]string, hookBatchSize)
358358
newCommitIDs := make([]string, hookBatchSize)

modules/private/hook.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ type HookOptions struct {
5454
GitQuarantinePath string
5555
GitPushOptions GitPushOptions
5656
PullRequestID int64
57-
PullRequestAction string
57+
PushTrigger string
5858
DeployKeyID int64 // if the pusher is a DeployKey, then UserID is the repo's org user.
5959
IsUncyclo bool
6060
ActionPerm int

modules/repository/env.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ const (
2525
EnvKeyID = "GITEA_KEY_ID" // public key ID
2626
EnvDeployKeyID = "GITEA_DEPLOY_KEY_ID"
2727
EnvPRID = "GITEA_PR_ID"
28-
EnvPRAction = "GITEA_PR_ACTION"
28+
EnvPushTrigger = "GITEA_PUSH_TRIGGER"
2929
EnvIsInternal = "GITEA_INTERNAL_PUSH"
3030
EnvAppURL = "GITEA_ROOT_URL"
3131
EnvActionPerm = "GITEA_ACTION_PERM"
3232
)
3333

34+
type PushTrigger string
35+
3436
const (
35-
PullRequestActionMerge = "merge"
37+
PushTriggerPRMergeToBase PushTrigger = "pr-merge-to-base"
3638
)
3739

3840
// InternalPushingEnvironment returns an os environment to switch off hooks on push

routers/private/hook_post_receive.go

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -323,51 +323,53 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
323323

324324
const contextCachePusherKey = "hook_post_receive_pusher"
325325

326+
// handlePullRequestMerging handle pull request merging, a pull request action should only push 1 commit
326327
func handlePullRequestMerging(ctx *gitea_context.PrivateContext, opts *private.HookOptions, ownerName, repoName string, updates []*repo_module.PushUpdateOptions) {
327-
// handle pull request merging, a pull request action should only push 1 commit
328-
if opts.PullRequestAction == repo_module.PullRequestActionMerge && len(updates) >= 1 {
329-
// Get the pull request
330-
pr, err := issues_model.GetPullRequestByID(ctx, opts.PullRequestID)
331-
if err != nil {
332-
log.Error("GetPullRequestByID[%d]: %v", opts.PullRequestID, err)
333-
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
334-
Err: fmt.Sprintf("GetPullRequestByID[%d]: %v", opts.PullRequestID, err),
335-
})
336-
return
337-
}
328+
if opts.PushTrigger != string(repo_module.PushTriggerPRMergeToBase) || len(updates) < 1 {
329+
return
330+
}
338331

339-
pusher, err := cache.GetWithContextCache(ctx, contextCachePusherKey, opts.UserID, func() (*user_model.User, error) {
340-
return user_model.GetUserByID(ctx, opts.UserID)
332+
// Get the pull request
333+
pr, err := issues_model.GetPullRequestByID(ctx, opts.PullRequestID)
334+
if err != nil {
335+
log.Error("GetPullRequestByID[%d]: %v", opts.PullRequestID, err)
336+
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
337+
Err: fmt.Sprintf("GetPullRequestByID[%d]: %v", opts.PullRequestID, err),
341338
})
342-
if err != nil {
343-
log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
344-
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
345-
Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err),
346-
})
347-
return
348-
}
339+
return
340+
}
349341

350-
pr.MergedCommitID = updates[len(updates)-1].NewCommitID
351-
pr.MergedUnix = timeutil.TimeStampNow()
352-
pr.Merger = pusher
353-
pr.MergerID = opts.UserID
342+
pusher, err := cache.GetWithContextCache(ctx, contextCachePusherKey, opts.UserID, func() (*user_model.User, error) {
343+
return user_model.GetUserByID(ctx, opts.UserID)
344+
})
345+
if err != nil {
346+
log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
347+
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
348+
Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err),
349+
})
350+
return
351+
}
354352

355-
if err := db.WithTx(ctx, func(ctx context.Context) error {
356-
// Removing an auto merge pull and ignore if not exist
357-
if err := pull_model.DeleteScheduledAutoMerge(ctx, pr.ID); err != nil && !db.IsErrNotExist(err) {
358-
return fmt.Errorf("DeleteScheduledAutoMerge[%d]: %v", opts.PullRequestID, err)
359-
}
353+
pr.MergedCommitID = updates[len(updates)-1].NewCommitID
354+
pr.MergedUnix = timeutil.TimeStampNow()
355+
pr.Merger = pusher
356+
pr.MergerID = opts.UserID
360357

361-
if _, err := pr.SetMerged(ctx); err != nil {
362-
return fmt.Errorf("Failed to SetMerged: %s/%s Error: %v", ownerName, repoName, err)
363-
}
364-
return nil
365-
}); err != nil {
366-
log.Error("%v", err)
367-
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
368-
Err: err.Error(),
369-
})
370-
return
358+
if err := db.WithTx(ctx, func(ctx context.Context) error {
359+
// Removing an auto merge pull and ignore if not exist
360+
if err := pull_model.DeleteScheduledAutoMerge(ctx, pr.ID); err != nil && !db.IsErrNotExist(err) {
361+
return fmt.Errorf("DeleteScheduledAutoMerge[%d]: %v", opts.PullRequestID, err)
371362
}
363+
364+
if _, err := pr.SetMerged(ctx); err != nil {
365+
return fmt.Errorf("Failed to SetMerged: %s/%s Error: %v", ownerName, repoName, err)
366+
}
367+
return nil
368+
}); err != nil {
369+
log.Error("%v", err)
370+
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
371+
Err: err.Error(),
372+
})
373+
return
372374
}
373375
}

services/pull/merge.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
177177
go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false, "", "")
178178
}()
179179

180-
_, err = doMergeAndPush(ctx, pr, doer, mergeStyle, expectedHeadCommitID, message, true)
180+
_, err = doMergeAndPush(ctx, pr, doer, mergeStyle, expectedHeadCommitID, message, repo_module.PushTriggerPRMergeToBase)
181181
if err != nil {
182182
return err
183183
}
@@ -236,7 +236,7 @@ func Merge(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.U
236236
}
237237

238238
// doMergeAndPush performs the merge operation without changing any pull information in database and pushes it up to the base repository
239-
func doMergeAndPush(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.User, mergeStyle repo_model.MergeStyle, expectedHeadCommitID, message string, isMerge bool) (string, error) {
239+
func doMergeAndPush(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.User, mergeStyle repo_model.MergeStyle, expectedHeadCommitID, message string, pushTrigger repo_module.PushTrigger) (string, error) {
240240
// Clone base repo.
241241
mergeCtx, cancel, err := createTemporaryRepoForMerge(ctx, pr, doer, expectedHeadCommitID)
242242
if err != nil {
@@ -309,11 +309,8 @@ func doMergeAndPush(ctx context.Context, pr *issues_model.PullRequest, doer *use
309309
pr.BaseRepo.Name,
310310
pr.ID,
311311
)
312-
action := ""
313-
if isMerge {
314-
action = repo_module.PullRequestActionMerge
315-
}
316-
mergeCtx.env = append(mergeCtx.env, repo_module.EnvPRAction+"="+action)
312+
313+
mergeCtx.env = append(mergeCtx.env, repo_module.EnvPushTrigger+"="+string(pushTrigger))
317314
pushCmd := git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch)
318315

319316
// Push back to upstream.

services/pull/update.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func Update(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.
7272
BaseBranch: pr.HeadBranch,
7373
}
7474

75-
_, err = doMergeAndPush(ctx, reversePR, doer, repo_model.MergeStyleMerge, "", message, false)
75+
_, err = doMergeAndPush(ctx, reversePR, doer, repo_model.MergeStyleMerge, "", message, "")
7676

7777
defer func() {
7878
go AddTestPullRequestTask(doer, reversePR.HeadRepo.ID, reversePR.HeadBranch, false, "", "")

0 commit comments

Comments
 (0)