aboutsummaryrefslogtreecommitdiff
path: root/models/repo_branch.go
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-17 15:10:50 -0500
committerUnknwon <u@gogs.io>2017-02-17 15:10:50 -0500
commit7e09d210ba421a1baf03ef7ba8770bebe8d28b72 (patch)
tree1d209f6175c3e4d7e21c4bda62e65db0ac4608f5 /models/repo_branch.go
parentdab768212af15f4e671e5403ad3def455117f699 (diff)
Initial version of protected branches (#776)
- Able to restrict force push and deletion - Able to restrict direct push
Diffstat (limited to 'models/repo_branch.go')
-rw-r--r--models/repo_branch.go57
1 files changed, 56 insertions, 1 deletions
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)
+}