Dont overwrite err with nil & rename PullCheckingFuncs to reflect there usage (#19572)

- dont overwrite err with nil unintentionaly
- rename CheckPRReadyToMerge to CheckPullBranchProtections
- rename prQueue to prPatchCheckerQueue

from #9307

Co-authored-by: delvh <dev.lh@web.de>
tokarchuk/v1.17
6543 3 years ago committed by GitHub
parent 3725fa28cc
commit d8905cb623
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      routers/private/hook_pre_receive.go
  2. 28
      services/pull/check.go
  3. 10
      services/pull/check_test.go
  4. 4
      services/pull/merge.go

@ -343,7 +343,7 @@ func preReceiveBranch(ctx *preReceiveContext, oldCommitID, newCommitID, refFullN
} }
// Check all status checks and reviews are ok // Check all status checks and reviews are ok
if err := pull_service.CheckPRReadyToMerge(ctx, pr, true); err != nil { if err := pull_service.CheckPullBranchProtections(ctx, pr, true); err != nil {
if models.IsErrDisallowedToMerge(err) { if models.IsErrDisallowedToMerge(err) {
log.Warn("Forbidden: User %d is not allowed push to protected branch %s in %-v and pr #%d is not ready to be merged: %s", ctx.opts.UserID, branchName, repo, pr.Index, err.Error()) log.Warn("Forbidden: User %d is not allowed push to protected branch %s in %-v and pr #%d is not ready to be merged: %s", ctx.opts.UserID, branchName, repo, pr.Index, err.Error())
ctx.JSON(http.StatusForbidden, private.Response{ ctx.JSON(http.StatusForbidden, private.Response{

@ -28,12 +28,12 @@ import (
asymkey_service "code.gitea.io/gitea/services/asymkey" asymkey_service "code.gitea.io/gitea/services/asymkey"
) )
// prQueue represents a queue to handle update pull request tests // prPatchCheckerQueue represents a queue to handle update pull request tests
var prQueue queue.UniqueQueue var prPatchCheckerQueue queue.UniqueQueue
var ( var (
ErrIsClosed = errors.New("pull is cosed") ErrIsClosed = errors.New("pull is closed")
ErrUserNotAllowedToMerge = errors.New("user not allowed to merge") ErrUserNotAllowedToMerge = models.ErrDisallowedToMerge{}
ErrHasMerged = errors.New("has already been merged") ErrHasMerged = errors.New("has already been merged")
ErrIsWorkInProgress = errors.New("work in progress PRs cannot be merged") ErrIsWorkInProgress = errors.New("work in progress PRs cannot be merged")
ErrIsChecking = errors.New("cannot merge while conflict checking is in progress") ErrIsChecking = errors.New("cannot merge while conflict checking is in progress")
@ -43,7 +43,7 @@ var (
// AddToTaskQueue adds itself to pull request test task queue. // AddToTaskQueue adds itself to pull request test task queue.
func AddToTaskQueue(pr *models.PullRequest) { func AddToTaskQueue(pr *models.PullRequest) {
err := prQueue.PushFunc(strconv.FormatInt(pr.ID, 10), func() error { err := prPatchCheckerQueue.PushFunc(strconv.FormatInt(pr.ID, 10), func() error {
pr.Status = models.PullRequestStatusChecking pr.Status = models.PullRequestStatusChecking
err := pr.UpdateColsIfNotMerged("status") err := pr.UpdateColsIfNotMerged("status")
if err != nil { if err != nil {
@ -93,13 +93,13 @@ func CheckPullMergable(ctx context.Context, doer *user_model.User, perm *models.
return ErrIsChecking return ErrIsChecking
} }
if err := CheckPRReadyToMerge(ctx, pr, false); err != nil { if err := CheckPullBranchProtections(ctx, pr, false); err != nil {
if models.IsErrDisallowedToMerge(err) { if models.IsErrDisallowedToMerge(err) {
if force { if force {
if isRepoAdmin, err := models.IsUserRepoAdmin(pr.BaseRepo, doer); err != nil { if isRepoAdmin, err2 := models.IsUserRepoAdmin(pr.BaseRepo, doer); err2 != nil {
return err return err2
} else if !isRepoAdmin { } else if !isRepoAdmin {
return ErrUserNotAllowedToMerge return err
} }
} }
} else { } else {
@ -144,7 +144,7 @@ func checkAndUpdateStatus(pr *models.PullRequest) {
} }
// Make sure there is no waiting test to process before leaving the checking status. // Make sure there is no waiting test to process before leaving the checking status.
has, err := prQueue.Has(strconv.FormatInt(pr.ID, 10)) has, err := prPatchCheckerQueue.Has(strconv.FormatInt(pr.ID, 10))
if err != nil { if err != nil {
log.Error("Unable to check if the queue is waiting to reprocess pr.ID %d. Error: %v", pr.ID, err) log.Error("Unable to check if the queue is waiting to reprocess pr.ID %d. Error: %v", pr.ID, err)
} }
@ -293,7 +293,7 @@ func InitializePullRequests(ctx context.Context) {
case <-ctx.Done(): case <-ctx.Done():
return return
default: default:
if err := prQueue.PushFunc(strconv.FormatInt(prID, 10), func() error { if err := prPatchCheckerQueue.PushFunc(strconv.FormatInt(prID, 10), func() error {
log.Trace("Adding PR ID: %d to the pull requests patch checking queue", prID) log.Trace("Adding PR ID: %d to the pull requests patch checking queue", prID)
return nil return nil
}); err != nil { }); err != nil {
@ -358,13 +358,13 @@ func CheckPrsForBaseBranch(baseRepo *repo_model.Repository, baseBranchName strin
// Init runs the task queue to test all the checking status pull requests // Init runs the task queue to test all the checking status pull requests
func Init() error { func Init() error {
prQueue = queue.CreateUniqueQueue("pr_patch_checker", handle, "") prPatchCheckerQueue = queue.CreateUniqueQueue("pr_patch_checker", handle, "")
if prQueue == nil { if prPatchCheckerQueue == nil {
return fmt.Errorf("Unable to create pr_patch_checker Queue") return fmt.Errorf("Unable to create pr_patch_checker Queue")
} }
go graceful.GetManager().RunWithShutdownFns(prQueue.Run) go graceful.GetManager().RunWithShutdownFns(prPatchCheckerQueue.Run)
go graceful.GetManager().RunWithShutdownContext(InitializePullRequests) go graceful.GetManager().RunWithShutdownContext(InitializePullRequests)
return nil return nil
} }

@ -41,7 +41,7 @@ func TestPullRequest_AddToTaskQueue(t *testing.T) {
queueShutdown := []func(){} queueShutdown := []func(){}
queueTerminate := []func(){} queueTerminate := []func(){}
prQueue = q.(queue.UniqueQueue) prPatchCheckerQueue = q.(queue.UniqueQueue)
pr := unittest.AssertExistsAndLoadBean(t, &models.PullRequest{ID: 2}).(*models.PullRequest) pr := unittest.AssertExistsAndLoadBean(t, &models.PullRequest{ID: 2}).(*models.PullRequest)
AddToTaskQueue(pr) AddToTaskQueue(pr)
@ -51,11 +51,11 @@ func TestPullRequest_AddToTaskQueue(t *testing.T) {
return pr.Status == models.PullRequestStatusChecking return pr.Status == models.PullRequestStatusChecking
}, 1*time.Second, 100*time.Millisecond) }, 1*time.Second, 100*time.Millisecond)
has, err := prQueue.Has(strconv.FormatInt(pr.ID, 10)) has, err := prPatchCheckerQueue.Has(strconv.FormatInt(pr.ID, 10))
assert.True(t, has) assert.True(t, has)
assert.NoError(t, err) assert.NoError(t, err)
prQueue.Run(func(shutdown func()) { prPatchCheckerQueue.Run(func(shutdown func()) {
queueShutdown = append(queueShutdown, shutdown) queueShutdown = append(queueShutdown, shutdown)
}, func(terminate func()) { }, func(terminate func()) {
queueTerminate = append(queueTerminate, terminate) queueTerminate = append(queueTerminate, terminate)
@ -68,7 +68,7 @@ func TestPullRequest_AddToTaskQueue(t *testing.T) {
assert.Fail(t, "Timeout: nothing was added to pullRequestQueue") assert.Fail(t, "Timeout: nothing was added to pullRequestQueue")
} }
has, err = prQueue.Has(strconv.FormatInt(pr.ID, 10)) has, err = prPatchCheckerQueue.Has(strconv.FormatInt(pr.ID, 10))
assert.False(t, has) assert.False(t, has)
assert.NoError(t, err) assert.NoError(t, err)
@ -82,5 +82,5 @@ func TestPullRequest_AddToTaskQueue(t *testing.T) {
callback() callback()
} }
prQueue = nil prPatchCheckerQueue = nil
} }

@ -662,8 +662,8 @@ func IsUserAllowedToMerge(pr *models.PullRequest, p models.Permission, user *use
return false, nil return false, nil
} }
// CheckPRReadyToMerge checks whether the PR is ready to be merged (reviews and status checks) // CheckPullBranchProtections checks whether the PR is ready to be merged (reviews and status checks)
func CheckPRReadyToMerge(ctx context.Context, pr *models.PullRequest, skipProtectedFilesCheck bool) (err error) { func CheckPullBranchProtections(ctx context.Context, pr *models.PullRequest, skipProtectedFilesCheck bool) (err error) {
if err = pr.LoadBaseRepoCtx(ctx); err != nil { if err = pr.LoadBaseRepoCtx(ctx); err != nil {
return fmt.Errorf("LoadBaseRepo: %v", err) return fmt.Errorf("LoadBaseRepo: %v", err)
} }

Loading…
Cancel
Save