diff options
Diffstat (limited to 'routers')
-rw-r--r-- | routers/install.go | 1 | ||||
-rw-r--r-- | routers/repo/http.go | 5 | ||||
-rw-r--r-- | routers/repo/pull.go | 33 | ||||
-rw-r--r-- | routers/repo/setting.go | 14 |
4 files changed, 44 insertions, 9 deletions
diff --git a/routers/install.go b/routers/install.go index 4b22463ed5..6fa7c12a13 100644 --- a/routers/install.go +++ b/routers/install.go @@ -66,6 +66,7 @@ func GlobalInit() { models.HasEngine = true cron.NewContext() models.InitDeliverHooks() + models.InitTestPullRequests() log.NewGitLogger(path.Join(setting.LogRootPath, "http.log")) } if models.EnableSQLite3 { diff --git a/routers/repo/http.go b/routers/repo/http.go index 52c9fbd39e..178ae92c1a 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -34,7 +34,7 @@ func authRequired(ctx *middleware.Context) { ctx.HTML(401, base.TplName("status/401")) } -func Http(ctx *middleware.Context) { +func HTTP(ctx *middleware.Context) { username := ctx.Params(":username") reponame := ctx.Params(":reponame") if strings.HasSuffix(reponame, ".git") { @@ -195,7 +195,8 @@ func Http(ctx *middleware.Context) { // FIXME: handle error. if err = models.Update(refName, oldCommitId, newCommitId, authUsername, username, reponame, authUser.Id); err == nil { - models.HookQueue.AddRepoID(repo.ID) + go models.HookQueue.Add(repo.ID) + go models.AddTestPullRequestTask(repo.ID, strings.TrimPrefix(refName, "refs/heads/")) } } diff --git a/routers/repo/pull.go b/routers/repo/pull.go index c8f00cc0f5..eade4407f7 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -6,6 +6,7 @@ package repo import ( "container/list" + "errors" "path" "strings" @@ -148,6 +149,9 @@ func checkPullInfo(ctx *middleware.Context) *models.Issue { if err = issue.GetPoster(); err != nil { ctx.Handle(500, "GetPoster", err) return nil + } else if issue.GetHeadRepo(); err != nil { + ctx.Handle(500, "GetHeadRepo", err) + return nil } if ctx.IsSigned { @@ -166,6 +170,11 @@ func PrepareMergedViewPullInfo(ctx *middleware.Context, pull *models.Issue) { var err error + if err = pull.GetMerger(); err != nil { + ctx.Handle(500, "GetMerger", err) + return + } + ctx.Data["HeadTarget"] = pull.HeadUserName + "/" + pull.HeadBranch ctx.Data["BaseTarget"] = ctx.Repo.Owner.Name + "/" + pull.BaseBranch @@ -191,6 +200,12 @@ func PrepareViewPullInfo(ctx *middleware.Context, pull *models.Issue) *git.PullR headGitRepo *git.Repository err error ) + + if err = pull.GetHeadRepo(); err != nil { + ctx.Handle(500, "GetHeadRepo", err) + return nil + } + if pull.HeadRepo != nil { headRepoPath, err := pull.HeadRepo.RepoPath() if err != nil { @@ -628,3 +643,21 @@ func CompareAndPullRequestPost(ctx *middleware.Context, form auth.CreateIssueFor log.Trace("Pull request created: %d/%d", repo.ID, pull.ID) ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pull.Index)) } + +func TriggerTask(ctx *middleware.Context) { + _, repo := parseOwnerAndRepo(ctx) + if ctx.Written() { + return + } + branch := ctx.Query("branch") + if len(branch) == 0 { + ctx.Handle(422, "TriggerTask", errors.New("branch is empty")) + return + } + + log.Trace("TriggerTask[%d].(new request): %s", repo.ID, branch) + + go models.HookQueue.Add(repo.ID) + go models.AddTestPullRequestTask(repo.ID, branch) + ctx.Status(202) +} diff --git a/routers/repo/setting.go b/routers/repo/setting.go index a9930e7841..089c939ec0 100644 --- a/routers/repo/setting.go +++ b/routers/repo/setting.go @@ -564,28 +564,28 @@ func DeleteWebhook(ctx *middleware.Context) { }) } -func TriggerHook(ctx *middleware.Context) { - u, err := models.GetUserByName(ctx.Params(":username")) +func parseOwnerAndRepo(ctx *middleware.Context) (*models.User, *models.Repository) { + owner, err := models.GetUserByName(ctx.Params(":username")) if err != nil { if models.IsErrUserNotExist(err) { ctx.Handle(404, "GetUserByName", err) } else { ctx.Handle(500, "GetUserByName", err) } - return + return nil, nil } - repo, err := models.GetRepositoryByName(u.Id, ctx.Params(":reponame")) + repo, err := models.GetRepositoryByName(owner.Id, ctx.Params(":reponame")) if err != nil { if models.IsErrRepoNotExist(err) { ctx.Handle(404, "GetRepositoryByName", err) } else { ctx.Handle(500, "GetRepositoryByName", err) } - return + return nil, nil } - models.HookQueue.AddRepoID(repo.ID) - ctx.Status(200) + + return owner, repo } func GitHooks(ctx *middleware.Context) { |