diff options
author | David Svantesson <davidsvantesson@gmail.com> | 2020-01-03 18:47:10 +0100 |
---|---|---|
committer | Lauris BH <lauris@nix.lv> | 2020-01-03 19:47:09 +0200 |
commit | ea707f5a77d83d023cb02ce8e44c4b95ac83ef30 (patch) | |
tree | fdebe0cc3d2b0e41cf8c7932ae446a2e3c500bbc /models/branches.go | |
parent | b39fab41c8b315ba7ddf9f9a4cc522385cf9f720 (diff) | |
download | gitea-ea707f5a77d83d023cb02ce8e44c4b95ac83ef30.tar.gz gitea-ea707f5a77d83d023cb02ce8e44c4b95ac83ef30.zip |
Add branch protection option to block merge on requested changes. (#9592)
* Add branch protection option to block merge on requested changes.
* Add migration step
* Fix check to correct negation
* Apply suggestions from code review
Language improvement.
Co-Authored-By: John Olheiser <42128690+jolheiser@users.noreply.github.com>
* Copyright year.
Co-authored-by: John Olheiser <42128690+jolheiser@users.noreply.github.com>
Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'models/branches.go')
-rw-r--r-- | models/branches.go | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/models/branches.go b/models/branches.go index 21b23c75d9..385817e4f9 100644 --- a/models/branches.go +++ b/models/branches.go @@ -44,6 +44,7 @@ type ProtectedBranch struct { ApprovalsWhitelistUserIDs []int64 `xorm:"JSON TEXT"` ApprovalsWhitelistTeamIDs []int64 `xorm:"JSON TEXT"` RequiredApprovals int64 `xorm:"NOT NULL DEFAULT 0"` + BlockOnRejectedReviews bool `xorm:"NOT NULL DEFAULT false"` CreatedUnix timeutil.TimeStamp `xorm:"created"` UpdatedUnix timeutil.TimeStamp `xorm:"updated"` } @@ -166,6 +167,23 @@ func (protectBranch *ProtectedBranch) GetGrantedApprovalsCount(pr *PullRequest) return approvals } +// MergeBlockedByRejectedReview returns true if merge is blocked by rejected reviews +func (protectBranch *ProtectedBranch) MergeBlockedByRejectedReview(pr *PullRequest) bool { + if !protectBranch.BlockOnRejectedReviews { + return false + } + rejectExist, err := x.Where("issue_id = ?", pr.IssueID). + And("type = ?", ReviewTypeReject). + And("official = ?", true). + Exist(new(Review)) + if err != nil { + log.Error("MergeBlockedByRejectedReview: %v", err) + return true + } + + return rejectExist +} + // GetProtectedBranchByRepoID getting protected branch by repo ID func GetProtectedBranchByRepoID(repoID int64) ([]*ProtectedBranch, error) { protectedBranches := make([]*ProtectedBranch, 0) @@ -340,7 +358,7 @@ func (repo *Repository) IsProtectedBranchForMerging(pr *PullRequest, branchName if err != nil { return true, err } else if has { - return !protectedBranch.CanUserMerge(doer.ID) || !protectedBranch.HasEnoughApprovals(pr), nil + return !protectedBranch.CanUserMerge(doer.ID) || !protectedBranch.HasEnoughApprovals(pr) || protectedBranch.MergeBlockedByRejectedReview(pr), nil } return false, nil |