summaryrefslogtreecommitdiffstats
path: root/models/pull.go
diff options
context:
space:
mode:
authorMartin Hartkorn <github@hartkorn.net>2016-01-30 23:56:38 +0100
committerMartin Hartkorn <github@hartkorn.net>2016-01-30 23:56:38 +0100
commit20403f75fbf043747eb0c9e571a8ff7c4594ad2a (patch)
tree758c659cc5dc385818aa34358b7b425bb529db15 /models/pull.go
parent6e03f6161777b38c0c185793e8f0294851796e46 (diff)
downloadgitea-20403f75fbf043747eb0c9e571a8ff7c4594ad2a.tar.gz
gitea-20403f75fbf043747eb0c9e571a8ff7c4594ad2a.zip
Enable a way to checkout Pull Requests from remote refs
Diffstat (limited to 'models/pull.go')
-rw-r--r--models/pull.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/models/pull.go b/models/pull.go
index 47d80473a0..3935c13010 100644
--- a/models/pull.go
+++ b/models/pull.go
@@ -5,6 +5,7 @@
package models
import (
+ "errors"
"fmt"
"os"
"path"
@@ -395,6 +396,44 @@ func GetUnmergedPullRequestsByBaseInfo(repoID int64, branch string) ([]*PullRequ
Join("INNER", "issue", "issue.id=pull_request.issue_id").Find(&prs)
}
+// Gets a Pull Request by the path of the forked repo and the branch from where the PR
+// got submitted.
+func GetUnmergedPullRequestByRepoPathAndHeadBranch(user, repo, branch string) (*PullRequest, error) {
+ userLower := strings.ToLower(user)
+ repoLower := strings.ToLower(repo)
+
+ pr := new(PullRequest)
+ if x == nil {
+ return nil, errors.New("Fail")
+ }
+ has, err := x.
+ Where("head_user_name=? AND head_branch=? AND has_merged=? AND issue.is_closed=? AND repository.lower_name=?", userLower, branch, 0, 0, repoLower).
+ Join("INNER", "repository", "repository.id=pull_request.head_repo_id").
+ Join("INNER", "issue", "issue.id=pull_request.issue_id").
+ Get(pr)
+
+ if err != nil {
+ return nil, err
+ } else if !has {
+ return nil, ErrPullRequestNotExist{0, 0, 0, 0, branch, ""}
+ }
+
+ baseRepo := new(Repository)
+ has, err = x.Where("repository.id=?", pr.BaseRepoID).
+ Join("LEFT", "user", "user.id=repository.owner_id").
+ Get(baseRepo)
+
+ if err != nil {
+ return nil, err
+ } else if !has {
+ return nil, ErrRepoNotExist{pr.BaseRepoID, 0, ""}
+ }
+
+ pr.BaseRepo = baseRepo
+
+ return pr, nil
+}
+
// GetPullRequestByID returns a pull request by given ID.
func GetPullRequestByID(id int64) (*PullRequest, error) {
pr := new(PullRequest)