mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-30 00:20:52 +00:00
refactor(automerge): fix error handling, populate recent automerge tasks on restart (#39001)
* Refactor "automerge" related code, clarify many details (including "unique queue item", start check by pull head or commit) * Fix automerge queue handler's error handling, clarify error messages * Populate recent automerge tasks on restart to restore the previous aborted automerge tasks Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -6,7 +6,7 @@ package automergequeue
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
issues_model "gitea.dev/models/issues"
|
||||
"gitea.dev/modules/git"
|
||||
@@ -14,21 +14,23 @@ import (
|
||||
"gitea.dev/modules/queue"
|
||||
)
|
||||
|
||||
var AutoMergeQueue *queue.WorkerPoolQueue[string]
|
||||
// AutoMergeItem is for the unique queue, so the item type can't be JSON which doesn't have deterministic key order.
|
||||
// Since the queue is a unique queue, the item must contain commit ID, otherwise the new commit ID will be ignored.
|
||||
type AutoMergeItem string
|
||||
|
||||
var AddToQueue = func(pr *issues_model.PullRequest, sha string) {
|
||||
log.Trace("Adding pullID: %d to the pull requests patch checking queue with sha %s", pr.ID, sha)
|
||||
if err := AutoMergeQueue.Push(fmt.Sprintf("%d_%s", pr.ID, sha)); err != nil && !errors.Is(err, queue.ErrAlreadyInQueue) {
|
||||
log.Error("Error adding pullID: %d to the pull requests patch checking queue %v", pr.ID, err)
|
||||
var AutoMergeQueue *queue.WorkerPoolQueue[AutoMergeItem]
|
||||
|
||||
var AddToQueue = func(item AutoMergeItem) {
|
||||
if err := AutoMergeQueue.Push(item); err != nil && !errors.Is(err, queue.ErrAlreadyInQueue) {
|
||||
log.Error("Error adding %v to the automerge queue: %v", item, err)
|
||||
}
|
||||
}
|
||||
|
||||
// StartPRCheckAndAutoMerge start an automerge check and auto merge task for a pull request
|
||||
func StartPRCheckAndAutoMerge(ctx context.Context, pull *issues_model.PullRequest) {
|
||||
if pull == nil || pull.HasMerged || !pull.IsStatusMergeable() {
|
||||
return
|
||||
}
|
||||
func StartAutoMergeCheckByPullCommit(pullID int64, commitID string) {
|
||||
AddToQueue(AutoMergeItem("pr:" + strconv.FormatInt(pullID, 10) + ":" + commitID))
|
||||
}
|
||||
|
||||
func StartAutoMergeCheckByPullHead(ctx context.Context, pull *issues_model.PullRequest) {
|
||||
if err := pull.LoadBaseRepo(ctx); err != nil {
|
||||
log.Error("LoadBaseRepo: %v", err)
|
||||
return
|
||||
@@ -40,11 +42,11 @@ func StartPRCheckAndAutoMerge(ctx context.Context, pull *issues_model.PullReques
|
||||
return
|
||||
}
|
||||
defer gitRepo.Close()
|
||||
|
||||
commitID, err := gitRepo.GetRefCommitID(ctx, pull.GetGitHeadRefName())
|
||||
if err != nil {
|
||||
log.Error("GetRefCommitID: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
AddToQueue(pull, commitID)
|
||||
StartAutoMergeCheckByPullCommit(pull.ID, commitID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user