mirror of https://github.com/go-gitea/gitea.git
Move pull request handle position on post receive
This commit is contained in:
parent
8a3ab78889
commit
a5985e43b3
|
@ -162,9 +162,56 @@ 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isPrivate := opts.GitPushOptions.Bool(private.GitPushOptionRepoPrivate)
|
isPrivate := opts.GitPushOptions.Bool(private.GitPushOptionRepoPrivate)
|
||||||
isTemplate := opts.GitPushOptions.Bool(private.GitPushOptionRepoTemplate)
|
isTemplate := opts.GitPushOptions.Bool(private.GitPushOptionRepoTemplate)
|
||||||
var pusher *user_model.User
|
|
||||||
// Handle Push Options
|
// Handle Push Options
|
||||||
if isPrivate.Has() || isTemplate.Has() {
|
if isPrivate.Has() || isTemplate.Has() {
|
||||||
// load the repository
|
// load the repository
|
||||||
|
@ -177,14 +224,16 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
|
||||||
wasEmpty = repo.IsEmpty
|
wasEmpty = repo.IsEmpty
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
if pusher == nil {
|
||||||
pusher, err = user_model.GetUserByID(ctx, opts.UserID)
|
var err error
|
||||||
if err != nil {
|
pusher, err = user_model.GetUserByID(ctx, opts.UserID)
|
||||||
log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
|
if err != nil {
|
||||||
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
|
log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err)
|
||||||
Err: fmt.Sprintf("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
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
perm, err := access_model.GetUserRepoPermission(ctx, repo, pusher)
|
perm, err := access_model.GetUserRepoPermission(ctx, repo, pusher)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -224,55 +273,6 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removing an auto merge pull and ignore if not exist
|
|
||||||
if err := pull_model.DeleteScheduledAutoMerge(ctx, pr.ID); err != nil && !db.IsErrNotExist(err) {
|
|
||||||
log.Error("DeleteScheduledAutoMerge[%d]: %v", opts.PullRequestID, err)
|
|
||||||
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
|
|
||||||
Err: fmt.Sprintf("DeleteScheduledAutoMerge[%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 {
|
|
||||||
_, err := pr.SetMerged(ctx)
|
|
||||||
return err
|
|
||||||
}); err != nil {
|
|
||||||
log.Error("Failed to SetMerged: %s/%s Error: %v", ownerName, repoName, err)
|
|
||||||
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
|
|
||||||
Err: fmt.Sprintf("Failed to SetMerged: %s/%s Error: %v", ownerName, repoName, err),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
results := make([]private.HookPostReceiveBranchResult, 0, len(opts.OldCommitIDs))
|
results := make([]private.HookPostReceiveBranchResult, 0, len(opts.OldCommitIDs))
|
||||||
|
|
||||||
// We have to reload the repo in case its state is changed above
|
// We have to reload the repo in case its state is changed above
|
||||||
|
|
Loading…
Reference in New Issue