mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Move checks for pulls before merge into own function (#19271)
This make checks in one single place so they dont differ and maintainer can not forget a check in one place while adding it to the other .... ( as it's atm ) Fix: * The API does ignore issue dependencies where Web does not * The API checks if "IsSignedIfRequired" where Web does not - UI probably do but nothing will some to craft custom requests * Default merge message is crafted a bit different between API and Web if not set on specific cases ...
This commit is contained in:
		@@ -660,21 +660,6 @@ func getDiffTree(ctx context.Context, repoPath, baseBranch, headBranch string) (
 | 
			
		||||
	return out.String(), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsSignedIfRequired check if merge will be signed if required
 | 
			
		||||
func IsSignedIfRequired(ctx context.Context, pr *models.PullRequest, doer *user_model.User) (bool, error) {
 | 
			
		||||
	if err := pr.LoadProtectedBranch(); err != nil {
 | 
			
		||||
		return false, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if pr.ProtectedBranch == nil || !pr.ProtectedBranch.RequireSignedCommits {
 | 
			
		||||
		return true, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sign, _, _, err := asymkey_service.SignMerge(ctx, pr, doer, pr.BaseRepo.RepoPath(), pr.BaseBranch, pr.GetGitRefName())
 | 
			
		||||
 | 
			
		||||
	return sign, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsUserAllowedToMerge check if user is allowed to merge PR with given permissions and branch protections
 | 
			
		||||
func IsUserAllowedToMerge(pr *models.PullRequest, p models.Permission, user *user_model.User) (bool, error) {
 | 
			
		||||
	if user == nil {
 | 
			
		||||
@@ -711,29 +696,29 @@ func CheckPRReadyToMerge(ctx context.Context, pr *models.PullRequest, skipProtec
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	if !isPass {
 | 
			
		||||
		return models.ErrNotAllowedToMerge{
 | 
			
		||||
		return models.ErrDisallowedToMerge{
 | 
			
		||||
			Reason: "Not all required status checks successful",
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !pr.ProtectedBranch.HasEnoughApprovals(pr) {
 | 
			
		||||
		return models.ErrNotAllowedToMerge{
 | 
			
		||||
		return models.ErrDisallowedToMerge{
 | 
			
		||||
			Reason: "Does not have enough approvals",
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if pr.ProtectedBranch.MergeBlockedByRejectedReview(pr) {
 | 
			
		||||
		return models.ErrNotAllowedToMerge{
 | 
			
		||||
		return models.ErrDisallowedToMerge{
 | 
			
		||||
			Reason: "There are requested changes",
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if pr.ProtectedBranch.MergeBlockedByOfficialReviewRequests(pr) {
 | 
			
		||||
		return models.ErrNotAllowedToMerge{
 | 
			
		||||
		return models.ErrDisallowedToMerge{
 | 
			
		||||
			Reason: "There are official review requests",
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if pr.ProtectedBranch.MergeBlockedByOutdatedBranch(pr) {
 | 
			
		||||
		return models.ErrNotAllowedToMerge{
 | 
			
		||||
		return models.ErrDisallowedToMerge{
 | 
			
		||||
			Reason: "The head branch is behind the base branch",
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -743,7 +728,7 @@ func CheckPRReadyToMerge(ctx context.Context, pr *models.PullRequest, skipProtec
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if pr.ProtectedBranch.MergeBlockedByProtectedFiles(pr) {
 | 
			
		||||
		return models.ErrNotAllowedToMerge{
 | 
			
		||||
		return models.ErrDisallowedToMerge{
 | 
			
		||||
			Reason: "Changed protected files",
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user