From 34fb9d68a5567423ddde736ff42f9780f4048366 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 15 Oct 2019 11:28:40 +0800 Subject: Move AddTestPullRequestTask to pull service package from models (#8324) * move AddTestPullRequestTask to pull service package from models * fix fmt --- services/pull/merge.go | 2 +- services/pull/pull.go | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) (limited to 'services/pull') 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() + } +} -- cgit v1.2.3