summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/pull.go87
-rw-r--r--modules/repofiles/update.go3
-rw-r--r--routers/repo/pull.go2
-rw-r--r--services/pull/merge.go2
-rw-r--r--services/pull/pull.go88
5 files changed, 92 insertions, 90 deletions
diff --git a/models/pull.go b/models/pull.go
index ff1f7b773b..962e433fb0 100644
--- a/models/pull.go
+++ b/models/pull.go
@@ -1072,93 +1072,6 @@ func (prs PullRequestList) InvalidateCodeComments(doer *User, repo *git.Reposito
return prs.invalidateCodeComments(x, doer, repo, branch)
}
-func addHeadRepoTasks(prs []*PullRequest) {
- for _, pr := range prs {
- log.Trace("addHeadRepoTasks[%d]: composing new test task", pr.ID)
- if err := pr.UpdatePatch(); err != nil {
- log.Error("UpdatePatch: %v", err)
- continue
- } else if err := pr.PushToBaseRepo(); err != nil {
- log.Error("PushToBaseRepo: %v", err)
- continue
- }
-
- pr.AddToTaskQueue()
- }
-}
-
-// AddTestPullRequestTask adds new test tasks by given head/base repository and head/base branch,
-// and generate new patch for testing as needed.
-func AddTestPullRequestTask(doer *User, repoID int64, branch string, isSync bool) {
- log.Trace("AddTestPullRequestTask [head_repo_id: %d, head_branch: %s]: finding pull requests", repoID, branch)
- prs, err := GetUnmergedPullRequestsByHeadInfo(repoID, branch)
- if err != nil {
- log.Error("Find pull requests [head_repo_id: %d, head_branch: %s]: %v", repoID, branch, err)
- return
- }
-
- if isSync {
- requests := PullRequestList(prs)
- if err = requests.LoadAttributes(); err != nil {
- log.Error("PullRequestList.LoadAttributes: %v", err)
- }
- if invalidationErr := checkForInvalidation(requests, repoID, doer, branch); invalidationErr != nil {
- log.Error("checkForInvalidation: %v", invalidationErr)
- }
- if err == nil {
- for _, pr := range prs {
- pr.Issue.PullRequest = pr
- if err = pr.Issue.LoadAttributes(); err != nil {
- log.Error("LoadAttributes: %v", err)
- continue
- }
- if err = PrepareWebhooks(pr.Issue.Repo, HookEventPullRequest, &api.PullRequestPayload{
- Action: api.HookIssueSynchronized,
- Index: pr.Issue.Index,
- PullRequest: pr.Issue.PullRequest.APIFormat(),
- Repository: pr.Issue.Repo.APIFormat(AccessModeNone),
- Sender: doer.APIFormat(),
- }); err != nil {
- log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
- continue
- }
- go HookQueue.Add(pr.Issue.Repo.ID)
- }
- }
-
- }
-
- addHeadRepoTasks(prs)
-
- log.Trace("AddTestPullRequestTask [base_repo_id: %d, base_branch: %s]: finding pull requests", repoID, branch)
- prs, err = GetUnmergedPullRequestsByBaseInfo(repoID, branch)
- if err != nil {
- log.Error("Find pull requests [base_repo_id: %d, base_branch: %s]: %v", repoID, branch, err)
- return
- }
- for _, pr := range prs {
- pr.AddToTaskQueue()
- }
-}
-
-func checkForInvalidation(requests PullRequestList, repoID int64, doer *User, branch string) error {
- repo, err := GetRepositoryByID(repoID)
- if err != nil {
- return fmt.Errorf("GetRepositoryByID: %v", err)
- }
- gitRepo, err := git.OpenRepository(repo.RepoPath())
- if err != nil {
- return fmt.Errorf("git.OpenRepository: %v", err)
- }
- go func() {
- err := requests.InvalidateCodeComments(doer, gitRepo, branch)
- if err != nil {
- log.Error("PullRequestList.InvalidateCodeComments: %v", err)
- }
- }()
- return nil
-}
-
// ChangeUsernameInPullRequests changes the name of head_user_name
func ChangeUsernameInPullRequests(oldUserName, newUserName string) error {
pr := PullRequest{
diff --git a/modules/repofiles/update.go b/modules/repofiles/update.go
index 1a1fe6c389..8a1e51730b 100644
--- a/modules/repofiles/update.go
+++ b/modules/repofiles/update.go
@@ -19,6 +19,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/structs"
+ pull_service "code.gitea.io/gitea/services/pull"
stdcharset "golang.org/x/net/html/charset"
"golang.org/x/text/transform"
@@ -498,7 +499,7 @@ func PushUpdate(repo *models.Repository, branch string, opts models.PushUpdateOp
log.Trace("TriggerTask '%s/%s' by %s", repo.Name, branch, pusher.Name)
- go models.AddTestPullRequestTask(pusher, repo.ID, branch, true)
+ go pull_service.AddTestPullRequestTask(pusher, repo.ID, branch, true)
if opts.RefFullName == git.BranchPrefix+repo.DefaultBranch {
models.UpdateRepoIndexer(repo)
diff --git a/routers/repo/pull.go b/routers/repo/pull.go
index 7af01c46ba..8b97e55670 100644
--- a/routers/repo/pull.go
+++ b/routers/repo/pull.go
@@ -820,7 +820,7 @@ func TriggerTask(ctx *context.Context) {
log.Trace("TriggerTask '%s/%s' by %s", repo.Name, branch, pusher.Name)
go models.HookQueue.Add(repo.ID)
- go models.AddTestPullRequestTask(pusher, repo.ID, branch, true)
+ go pull_service.AddTestPullRequestTask(pusher, repo.ID, branch, true)
ctx.Status(202)
}
diff --git a/services/pull/merge.go b/services/pull/merge.go
index e83784f31e..355d6dd911 100644
--- a/services/pull/merge.go
+++ b/services/pull/merge.go
@@ -50,7 +50,7 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor
}
defer func() {
- go models.AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false)
+ go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false)
}()
// Clone base repo.
diff --git a/services/pull/pull.go b/services/pull/pull.go
index 0dbd8fcd1a..3c584fce74 100644
--- a/services/pull/pull.go
+++ b/services/pull/pull.go
@@ -8,6 +8,7 @@ import (
"fmt"
"code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
api "code.gitea.io/gitea/modules/structs"
)
@@ -47,3 +48,90 @@ func NewPullRequest(repo *models.Repository, pull *models.Issue, labelIDs []int6
return nil
}
+
+func checkForInvalidation(requests models.PullRequestList, repoID int64, doer *models.User, branch string) error {
+ repo, err := models.GetRepositoryByID(repoID)
+ if err != nil {
+ return fmt.Errorf("GetRepositoryByID: %v", err)
+ }
+ gitRepo, err := git.OpenRepository(repo.RepoPath())
+ if err != nil {
+ return fmt.Errorf("git.OpenRepository: %v", err)
+ }
+ go func() {
+ err := requests.InvalidateCodeComments(doer, gitRepo, branch)
+ if err != nil {
+ log.Error("PullRequestList.InvalidateCodeComments: %v", err)
+ }
+ }()
+ return nil
+}
+
+func addHeadRepoTasks(prs []*models.PullRequest) {
+ for _, pr := range prs {
+ log.Trace("addHeadRepoTasks[%d]: composing new test task", pr.ID)
+ if err := pr.UpdatePatch(); err != nil {
+ log.Error("UpdatePatch: %v", err)
+ continue
+ } else if err := pr.PushToBaseRepo(); err != nil {
+ log.Error("PushToBaseRepo: %v", err)
+ continue
+ }
+
+ pr.AddToTaskQueue()
+ }
+}
+
+// AddTestPullRequestTask adds new test tasks by given head/base repository and head/base branch,
+// and generate new patch for testing as needed.
+func AddTestPullRequestTask(doer *models.User, repoID int64, branch string, isSync bool) {
+ log.Trace("AddTestPullRequestTask [head_repo_id: %d, head_branch: %s]: finding pull requests", repoID, branch)
+ prs, err := models.GetUnmergedPullRequestsByHeadInfo(repoID, branch)
+ if err != nil {
+ log.Error("Find pull requests [head_repo_id: %d, head_branch: %s]: %v", repoID, branch, err)
+ return
+ }
+
+ if isSync {
+ requests := models.PullRequestList(prs)
+ if err = requests.LoadAttributes(); err != nil {
+ log.Error("PullRequestList.LoadAttributes: %v", err)
+ }
+ if invalidationErr := checkForInvalidation(requests, repoID, doer, branch); invalidationErr != nil {
+ log.Error("checkForInvalidation: %v", invalidationErr)
+ }
+ if err == nil {
+ for _, pr := range prs {
+ pr.Issue.PullRequest = pr
+ if err = pr.Issue.LoadAttributes(); err != nil {
+ log.Error("LoadAttributes: %v", err)
+ continue
+ }
+ if err = models.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{
+ Action: api.HookIssueSynchronized,
+ Index: pr.Issue.Index,
+ PullRequest: pr.Issue.PullRequest.APIFormat(),
+ Repository: pr.Issue.Repo.APIFormat(models.AccessModeNone),
+ Sender: doer.APIFormat(),
+ }); err != nil {
+ log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
+ continue
+ }
+ go models.HookQueue.Add(pr.Issue.Repo.ID)
+ }
+ }
+
+ }
+
+ addHeadRepoTasks(prs)
+
+ log.Trace("AddTestPullRequestTask [base_repo_id: %d, base_branch: %s]: finding pull requests", repoID, branch)
+ prs, err = models.GetUnmergedPullRequestsByBaseInfo(repoID, branch)
+ if err != nil {
+ log.Error("Find pull requests [base_repo_id: %d, base_branch: %s]: %v", repoID, branch, err)
+ return
+ }
+ for _, pr := range prs {
+ pr.AddToTaskQueue()
+ }
+}