gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package automergequeue
  4. import (
  5. "context"
  6. "fmt"
  7. issues_model "code.gitea.io/gitea/models/issues"
  8. "code.gitea.io/gitea/modules/gitrepo"
  9. "code.gitea.io/gitea/modules/log"
  10. "code.gitea.io/gitea/modules/queue"
  11. )
  12. var AutoMergeQueue *queue.WorkerPoolQueue[string]
  13. var AddToQueue = func(pr *issues_model.PullRequest, sha string) {
  14. log.Trace("Adding pullID: %d to the pull requests patch checking queue with sha %s", pr.ID, sha)
  15. if err := AutoMergeQueue.Push(fmt.Sprintf("%d_%s", pr.ID, sha)); err != nil {
  16. log.Error("Error adding pullID: %d to the pull requests patch checking queue %v", pr.ID, err)
  17. }
  18. }
  19. // StartPRCheckAndAutoMerge start an automerge check and auto merge task for a pull request
  20. func StartPRCheckAndAutoMerge(ctx context.Context, pull *issues_model.PullRequest) {
  21. if pull == nil || pull.HasMerged || !pull.CanAutoMerge() {
  22. return
  23. }
  24. if err := pull.LoadBaseRepo(ctx); err != nil {
  25. log.Error("LoadBaseRepo: %v", err)
  26. return
  27. }
  28. gitRepo, err := gitrepo.OpenRepository(ctx, pull.BaseRepo)
  29. if err != nil {
  30. log.Error("OpenRepository: %v", err)
  31. return
  32. }
  33. defer gitRepo.Close()
  34. commitID, err := gitRepo.GetRefCommitID(pull.GetGitHeadRefName())
  35. if err != nil {
  36. log.Error("GetRefCommitID: %v", err)
  37. return
  38. }
  39. AddToQueue(pull, commitID)
  40. }