diff options
Diffstat (limited to 'models')
-rw-r--r-- | models/action.go | 1 | ||||
-rw-r--r-- | models/models.go | 4 | ||||
-rw-r--r-- | models/repo.go | 4 | ||||
-rw-r--r-- | models/repo_branch.go | 57 |
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) +} |