summaryrefslogtreecommitdiffstats
path: root/services/pull
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-10-15 11:28:40 +0800
committerzeripath <art27@cantab.net>2019-10-15 04:28:40 +0100
commit34fb9d68a5567423ddde736ff42f9780f4048366 (patch)
tree62eb0924d133a10d004b70895ad1b8267feb6dd2 /services/pull
parentebe8ff782fd56378e9946b716fd7e95babf67411 (diff)
downloadgitea-34fb9d68a5567423ddde736ff42f9780f4048366.tar.gz
gitea-34fb9d68a5567423ddde736ff42f9780f4048366.zip
Move AddTestPullRequestTask to pull service package from models (#8324)
* move AddTestPullRequestTask to pull service package from models * fix fmt
Diffstat (limited to 'services/pull')
-rw-r--r--services/pull/merge.go2
-rw-r--r--services/pull/pull.go88
2 files changed, 89 insertions, 1 deletions
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()
+ }
+}