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 @delvhtokarchuk/v1.17
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