mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Propagate context and ensure git commands run in request context (#17868)
This PR continues the work in #17125 by progressively ensuring that git commands run within the request context. This now means that the if there is a git repo already open in the context it will be used instead of reopening it. Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		@@ -6,6 +6,8 @@
 | 
			
		||||
package pull
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
	"code.gitea.io/gitea/models/db"
 | 
			
		||||
	"code.gitea.io/gitea/modules/git"
 | 
			
		||||
@@ -80,7 +82,7 @@ func IsCommitStatusContextSuccess(commitStatuses []*models.CommitStatus, require
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsPullCommitStatusPass returns if all required status checks PASS
 | 
			
		||||
func IsPullCommitStatusPass(pr *models.PullRequest) (bool, error) {
 | 
			
		||||
func IsPullCommitStatusPass(ctx context.Context, pr *models.PullRequest) (bool, error) {
 | 
			
		||||
	if err := pr.LoadProtectedBranch(); err != nil {
 | 
			
		||||
		return false, errors.Wrap(err, "GetLatestCommitStatus")
 | 
			
		||||
	}
 | 
			
		||||
@@ -88,7 +90,7 @@ func IsPullCommitStatusPass(pr *models.PullRequest) (bool, error) {
 | 
			
		||||
		return true, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	state, err := GetPullRequestCommitStatusState(pr)
 | 
			
		||||
	state, err := GetPullRequestCommitStatusState(ctx, pr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -96,18 +98,18 @@ func IsPullCommitStatusPass(pr *models.PullRequest) (bool, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetPullRequestCommitStatusState returns pull request merged commit status state
 | 
			
		||||
func GetPullRequestCommitStatusState(pr *models.PullRequest) (structs.CommitStatusState, error) {
 | 
			
		||||
func GetPullRequestCommitStatusState(ctx context.Context, pr *models.PullRequest) (structs.CommitStatusState, error) {
 | 
			
		||||
	// Ensure HeadRepo is loaded
 | 
			
		||||
	if err := pr.LoadHeadRepo(); err != nil {
 | 
			
		||||
		return "", errors.Wrap(err, "LoadHeadRepo")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// check if all required status checks are successful
 | 
			
		||||
	headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath())
 | 
			
		||||
	headGitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.HeadRepo.RepoPath())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", errors.Wrap(err, "OpenRepository")
 | 
			
		||||
	}
 | 
			
		||||
	defer headGitRepo.Close()
 | 
			
		||||
	defer closer.Close()
 | 
			
		||||
 | 
			
		||||
	if pr.Flow == models.PullRequestFlowGithub && !headGitRepo.IsBranchExist(pr.HeadBranch) {
 | 
			
		||||
		return "", errors.New("Head branch does not exist, can not merge")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user