aboutsummaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
Diffstat (limited to 'routers')
-rw-r--r--routers/install.go1
-rw-r--r--routers/repo/http.go5
-rw-r--r--routers/repo/pull.go33
-rw-r--r--routers/repo/setting.go14
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) {