aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/action.go1
-rw-r--r--models/models.go4
-rw-r--r--models/repo.go4
-rw-r--r--models/repo_branch.go57
4 files changed, 63 insertions, 3 deletions
diff --git a/models/action.go b/models/action.go
index ab8d9167..e4c73f3a 100644
--- a/models/action.go
+++ b/models/action.go
@@ -460,6 +460,7 @@ func CommitRepoAction(opts CommitRepoActionOptions) error {
opType = ACTION_PUSH_TAG
opts.Commits = &PushCommits{}
} else {
+ // TODO: detect branch deletion
// if not the first commit, set the compare URL.
if opts.OldCommitID == git.EMPTY_SHA {
isNewBranch = true
diff --git a/models/models.go b/models/models.go
index 30110225..0d63ea1a 100644
--- a/models/models.go
+++ b/models/models.go
@@ -65,8 +65,8 @@ func init() {
new(Watch), new(Star), new(Follow), new(Action),
new(Issue), new(PullRequest), new(Comment), new(Attachment), new(IssueUser),
new(Label), new(IssueLabel), new(Milestone),
- new(Mirror), new(Release), new(LoginSource), new(Webhook),
- new(HookTask),
+ new(Mirror), new(Release), new(LoginSource), new(Webhook), new(HookTask),
+ new(ProtectBranch),
new(Team), new(OrgUser), new(TeamUser), new(TeamRepo),
new(Notice), new(EmailAddress))
diff --git a/models/repo.go b/models/repo.go
index a06e9751..71bc2b44 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -441,6 +441,10 @@ func (repo *Repository) AllowsPulls() bool {
return repo.CanEnablePulls() && repo.EnablePulls
}
+func (repo *Repository) IsBranchRequirePullRequest(name string) bool {
+ return IsBranchOfRepoRequirePullRequest(repo.ID, name)
+}
+
// CanEnableEditor returns true if repository meets the requirements of web editor.
func (repo *Repository) CanEnableEditor() bool {
return !repo.IsMirror
diff --git a/models/repo_branch.go b/models/repo_branch.go
index 9cf2e9c4..6fe2222d 100644
--- a/models/repo_branch.go
+++ b/models/repo_branch.go
@@ -5,6 +5,8 @@
package models
import (
+ "fmt"
+
"github.com/gogits/git-module"
)
@@ -36,7 +38,7 @@ func GetBranchesByPath(path string) ([]*Branch, error) {
func (repo *Repository) GetBranch(br string) (*Branch, error) {
if !git.IsBranchExist(repo.RepoPath(), br) {
- return nil, &ErrBranchNotExist{br}
+ return nil, ErrBranchNotExist{br}
}
return &Branch{
Path: repo.RepoPath(),
@@ -55,3 +57,56 @@ func (br *Branch) GetCommit() (*git.Commit, error) {
}
return gitRepo.GetBranchCommit(br.Name)
}
+
+// ProtectBranch contains options of a protected branch.
+type ProtectBranch struct {
+ ID int64
+ RepoID int64 `xorm:"UNIQUE(protect_branch)"`
+ Name string `xorm:"UNIQUE(protect_branch)"`
+ Protected bool
+ RequirePullRequest bool
+}
+
+// GetProtectBranchOfRepoByName returns *ProtectBranch by branch name in given repostiory.
+func GetProtectBranchOfRepoByName(repoID int64, name string) (*ProtectBranch, error) {
+ protectBranch := &ProtectBranch{
+ RepoID: repoID,
+ Name: name,
+ }
+ has, err := x.Get(protectBranch)
+ if err != nil {
+ return nil, err
+ } else if !has {
+ return nil, ErrBranchNotExist{name}
+ }
+ return protectBranch, nil
+}
+
+// IsBranchOfRepoRequirePullRequest returns true if branch requires pull request in given repository.
+func IsBranchOfRepoRequirePullRequest(repoID int64, name string) bool {
+ protectBranch, err := GetProtectBranchOfRepoByName(repoID, name)
+ if err != nil {
+ return false
+ }
+ return protectBranch.Protected && protectBranch.RequirePullRequest
+}
+
+// UpdateProtectBranch saves branch protection options.
+// If ID is 0, it creates a new record. Otherwise, updates existing record.
+func UpdateProtectBranch(protectBranch *ProtectBranch) (err error) {
+ if protectBranch.ID == 0 {
+ if _, err = x.Insert(protectBranch); err != nil {
+ return fmt.Errorf("Insert: %v", err)
+ }
+ return
+ }
+
+ _, err = x.Id(protectBranch.ID).AllCols().Update(protectBranch)
+ return err
+}
+
+// GetProtectBranchesByRepoID returns a list of *ProtectBranch in given repostiory.
+func GetProtectBranchesByRepoID(repoID int64) ([]*ProtectBranch, error) {
+ protectBranches := make([]*ProtectBranch, 0, 2)
+ return protectBranches, x.Where("repo_id = ?", repoID).Asc("name").Find(&protectBranches)
+}