mirror of https://github.com/go-gitea/gitea
Move some code into models/git (#19879)
* Move access and repo permission to models/perm/access * fix test * Move some git related files into sub package models/git * Fix build * fix git test * move lfs to sub package * move more git related functions to models/git * Move functions sequence * Some improvements per @KN4CK3R and @delvhpull/19956/head
parent
a9dc9b06e4
commit
110fc57cbc
@ -0,0 +1,80 @@ |
||||
// Copyright 2022 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package models |
||||
|
||||
import ( |
||||
"context" |
||||
|
||||
"code.gitea.io/gitea/models/db" |
||||
git_model "code.gitea.io/gitea/models/git" |
||||
"code.gitea.io/gitea/modules/log" |
||||
) |
||||
|
||||
// HasEnoughApprovals returns true if pr has enough granted approvals.
|
||||
func HasEnoughApprovals(ctx context.Context, protectBranch *git_model.ProtectedBranch, pr *PullRequest) bool { |
||||
if protectBranch.RequiredApprovals == 0 { |
||||
return true |
||||
} |
||||
return GetGrantedApprovalsCount(ctx, protectBranch, pr) >= protectBranch.RequiredApprovals |
||||
} |
||||
|
||||
// GetGrantedApprovalsCount returns the number of granted approvals for pr. A granted approval must be authored by a user in an approval whitelist.
|
||||
func GetGrantedApprovalsCount(ctx context.Context, protectBranch *git_model.ProtectedBranch, pr *PullRequest) int64 { |
||||
sess := db.GetEngine(ctx).Where("issue_id = ?", pr.IssueID). |
||||
And("type = ?", ReviewTypeApprove). |
||||
And("official = ?", true). |
||||
And("dismissed = ?", false) |
||||
if protectBranch.DismissStaleApprovals { |
||||
sess = sess.And("stale = ?", false) |
||||
} |
||||
approvals, err := sess.Count(new(Review)) |
||||
if err != nil { |
||||
log.Error("GetGrantedApprovalsCount: %v", err) |
||||
return 0 |
||||
} |
||||
|
||||
return approvals |
||||
} |
||||
|
||||
// MergeBlockedByRejectedReview returns true if merge is blocked by rejected reviews
|
||||
func MergeBlockedByRejectedReview(ctx context.Context, protectBranch *git_model.ProtectedBranch, pr *PullRequest) bool { |
||||
if !protectBranch.BlockOnRejectedReviews { |
||||
return false |
||||
} |
||||
rejectExist, err := db.GetEngine(ctx).Where("issue_id = ?", pr.IssueID). |
||||
And("type = ?", ReviewTypeReject). |
||||
And("official = ?", true). |
||||
And("dismissed = ?", false). |
||||
Exist(new(Review)) |
||||
if err != nil { |
||||
log.Error("MergeBlockedByRejectedReview: %v", err) |
||||
return true |
||||
} |
||||
|
||||
return rejectExist |
||||
} |
||||
|
||||
// MergeBlockedByOfficialReviewRequests block merge because of some review request to official reviewer
|
||||
// of from official review
|
||||
func MergeBlockedByOfficialReviewRequests(ctx context.Context, protectBranch *git_model.ProtectedBranch, pr *PullRequest) bool { |
||||
if !protectBranch.BlockOnOfficialReviewRequests { |
||||
return false |
||||
} |
||||
has, err := db.GetEngine(ctx).Where("issue_id = ?", pr.IssueID). |
||||
And("type = ?", ReviewTypeRequest). |
||||
And("official = ?", true). |
||||
Exist(new(Review)) |
||||
if err != nil { |
||||
log.Error("MergeBlockedByOfficialReviewRequests: %v", err) |
||||
return true |
||||
} |
||||
|
||||
return has |
||||
} |
||||
|
||||
// MergeBlockedByOutdatedBranch returns true if merge is blocked by an outdated head branch
|
||||
func MergeBlockedByOutdatedBranch(protectBranch *git_model.ProtectedBranch, pr *PullRequest) bool { |
||||
return protectBranch.BlockOnOutdatedBranch && pr.CommitsBehind > 0 |
||||
} |
@ -1,26 +0,0 @@ |
||||
// Copyright 2021 Gitea. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package models |
||||
|
||||
import ( |
||||
asymkey_model "code.gitea.io/gitea/models/asymkey" |
||||
repo_model "code.gitea.io/gitea/models/repo" |
||||
user_model "code.gitea.io/gitea/models/user" |
||||
"code.gitea.io/gitea/modules/git" |
||||
) |
||||
|
||||
// ConvertFromGitCommit converts git commits into SignCommitWithStatuses
|
||||
func ConvertFromGitCommit(commits []*git.Commit, repo *repo_model.Repository) []*SignCommitWithStatuses { |
||||
return ParseCommitsWithStatus( |
||||
asymkey_model.ParseCommitsWithSignature( |
||||
user_model.ValidateCommitsWithEmails(commits), |
||||
repo.GetTrustModel(), |
||||
func(user *user_model.User) (bool, error) { |
||||
return IsOwnerMemberCollaborator(repo, user.ID) |
||||
}, |
||||
), |
||||
repo, |
||||
) |
||||
} |
@ -0,0 +1,18 @@ |
||||
// Copyright 2020 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package git_test |
||||
|
||||
import ( |
||||
"path/filepath" |
||||
"testing" |
||||
|
||||
"code.gitea.io/gitea/models/unittest" |
||||
) |
||||
|
||||
func TestMain(m *testing.M) { |
||||
unittest.MainTest(m, &unittest.TestOptions{ |
||||
GiteaRootPath: filepath.Join("..", ".."), |
||||
}) |
||||
} |
Loading…
Reference in new issue