diff options
author | Lunny Xiao <xiaolunwen@gmail.com> | 2019-10-15 11:28:40 +0800 |
---|---|---|
committer | zeripath <art27@cantab.net> | 2019-10-15 04:28:40 +0100 |
commit | 34fb9d68a5567423ddde736ff42f9780f4048366 (patch) | |
tree | 62eb0924d133a10d004b70895ad1b8267feb6dd2 /services/pull | |
parent | ebe8ff782fd56378e9946b716fd7e95babf67411 (diff) | |
download | gitea-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.go | 2 | ||||
-rw-r--r-- | services/pull/pull.go | 88 |
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() + } +} |