mirror of
https://gitcode.com/gitea/gitea.git
synced 2025-06-16 17:59:25 +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:
cmd
integrations
api_repo_file_helpers.goapi_repo_get_contents_list_test.goapi_repo_get_contents_test.gogit_helper_for_declarative_test.gomirror_pull_test.gopull_merge_test.gopull_update_test.gorepo_tag_test.gorepofiles_delete_test.gorepofiles_update_test.go
models
admin
db
issue_comment.goissue_comment_test.goissue_xref_test.gomigrations
pull.gorepo
repo_activity.goreview.goreview_test.gomodules
context
convert
doctor
authorizedkeys.gocheckOldArchives.godbconsistency.godbversion.godoctor.gofix16961.gomergebase.gomisc.gopaths.gostorage.gousertype.go
git
blame.gocommit.gocommit_info_test.gocommit_test.godiff.go
pipeline
repo.gorepo_base.gorepo_base_gogit.gorepo_base_nogogit.gorepo_branch.gorepo_branch_gogit.gorepo_commit.gorepo_compare.gorepo_test.gotree.gotree_entry_nogogit.gotree_nogogit.gogitgraph
indexer/code
lfs
markup
notification
process
repository
templates
test
web
routers
api/v1
api.go
misc
repo
blob.gobranch.gocommits.gofile.gonotes.gopull.gopull_review.gorelease.gorelease_tags.gorepo.gostatus.gotag.gotree.gowiki.go
utils
private
web
services
agit
asymkey
gitdiff
mailer
migrations
mirror
pull
release
repository
adopt.go
archiver
branch.gocheck.gofiles
commit.gocontent.gocontent_test.godelete.godiff.godiff_test.gofile.gofile_test.gotemp_repo.gotree.gotree_test.goupdate.goupload.go
hooks.gopush.gorepository.gowiki
templates
explore
repo
branch
commit_page.tmplcommits_list.tmplcommits_list_small.tmplgraph
header.tmplhome.tmplissue
settings
view_list.tmpluser/dashboard
tools
@ -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