some improvements

This commit is contained in:
Lunny Xiao 2024-05-01 22:04:43 +08:00
parent fb5eb505cf
commit 15b2cde4a5
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
1 changed files with 53 additions and 43 deletions

View File

@ -164,49 +164,10 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
var pusher *user_model.User
// handle pull request merging, a pull request action should only push 1 commit
if opts.PullRequestAction == repo_module.PullRequestActionMerge && len(updates) >= 1 {
// Get the pull request
pr, err := issues_model.GetPullRequestByID(ctx, opts.PullRequestID)
if err != nil {
log.Error("GetPullRequestByID[%d]: %v", opts.PullRequestID, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("GetPullRequestByID[%d]: %v", opts.PullRequestID, err),
})
return
}
pusher, err = user_model.GetUserByID(ctx, opts.UserID)
if err != nil {
log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err),
})
return
}
pr.MergedCommitID = updates[len(updates)-1].NewCommitID
pr.MergedUnix = timeutil.TimeStampNow()
pr.Merger = pusher
pr.MergerID = opts.UserID
if err := db.WithTx(ctx, func(ctx context.Context) error {
// Removing an auto merge pull and ignore if not exist
if err := pull_model.DeleteScheduledAutoMerge(ctx, pr.ID); err != nil && !db.IsErrNotExist(err) {
return fmt.Errorf("DeleteScheduledAutoMerge[%d]: %v", opts.PullRequestID, err)
}
if _, err := pr.SetMerged(ctx); err != nil {
return fmt.Errorf("Failed to SetMerged: %s/%s Error: %v", ownerName, repoName, err)
}
return nil
}); err != nil {
log.Error("%v", err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: err.Error(),
})
return
}
// handle pull request merging, a pull request action should push at least 1 commit
handlePullRequestMerging(ctx, opts, pusher, ownerName, repoName, updates)
if ctx.Written() {
return
}
isPrivate := opts.GitPushOptions.Bool(private.GitPushOptionRepoPrivate)
@ -362,3 +323,52 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
RepoWasEmpty: wasEmpty,
})
}
func handlePullRequestMerging(ctx *gitea_context.PrivateContext, opts *private.HookOptions, pusher *user_model.User, ownerName, repoName string, updates []*repo_module.PushUpdateOptions) {
// handle pull request merging, a pull request action should only push 1 commit
if opts.PullRequestAction == repo_module.PullRequestActionMerge && len(updates) >= 1 {
// Get the pull request
pr, err := issues_model.GetPullRequestByID(ctx, opts.PullRequestID)
if err != nil {
log.Error("GetPullRequestByID[%d]: %v", opts.PullRequestID, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("GetPullRequestByID[%d]: %v", opts.PullRequestID, err),
})
return
}
if pusher == nil {
pusher, err = user_model.GetUserByID(ctx, opts.UserID)
if err != nil {
log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err),
})
return
}
}
pr.MergedCommitID = updates[len(updates)-1].NewCommitID
pr.MergedUnix = timeutil.TimeStampNow()
pr.Merger = pusher
pr.MergerID = opts.UserID
if err := db.WithTx(ctx, func(ctx context.Context) error {
// Removing an auto merge pull and ignore if not exist
if err := pull_model.DeleteScheduledAutoMerge(ctx, pr.ID); err != nil && !db.IsErrNotExist(err) {
return fmt.Errorf("DeleteScheduledAutoMerge[%d]: %v", opts.PullRequestID, err)
}
if _, err := pr.SetMerged(ctx); err != nil {
return fmt.Errorf("Failed to SetMerged: %s/%s Error: %v", ownerName, repoName, err)
}
return nil
}); err != nil {
log.Error("%v", err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: err.Error(),
})
return
}
}
}