Skip to content

Commit c45661f

Browse files
committed
Merge branch 'lunny/fix_bot_automerge' into lunny/fix_bot_automerge2
2 parents a989404 + 8d4a7f0 commit c45661f

File tree

5 files changed

+13
-8
lines changed

5 files changed

+13
-8
lines changed

cmd/hook.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ Gitea or set your environment appropriately.`, "")
197197
PullRequestID: prID,
198198
DeployKeyID: deployKeyID,
199199
ActionPerm: int(actionPerm),
200+
PushTrigger: repo_module.PushTrigger(os.Getenv(repo_module.EnvPushTrigger)),
200201
}
201202

202203
scanner := bufio.NewScanner(os.Stdin)

models/pull/automerge.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func GetScheduledMergeByPullID(ctx context.Context, pullID int64) (bool, *AutoMe
7474
return false, nil, err
7575
}
7676

77-
doer, err := user_model.GetUserByID(ctx, scheduledPRM.DoerID)
77+
doer, err := user_model.GetPossibleUserByID(ctx, scheduledPRM.DoerID)
7878
if err != nil {
7979
return false, nil, err
8080
}

routers/private/hook_post_receive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
332332

333333
func loadContextCacheUser(ctx context.Context, id int64) (*user_model.User, error) {
334334
return cache.GetWithContextCache(ctx, "hook_post_receive_user", id, func() (*user_model.User, error) {
335-
return user_model.GetUserByID(ctx, id)
335+
return user_model.GetPossibleUserByID(ctx, id)
336336
})
337337
}
338338

services/automerge/automerge.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"code.gitea.io/gitea/models/db"
1414
issues_model "code.gitea.io/gitea/models/issues"
15+
"code.gitea.io/gitea/models/perm"
1516
access_model "code.gitea.io/gitea/models/perm/access"
1617
pull_model "code.gitea.io/gitea/models/pull"
1718
repo_model "code.gitea.io/gitea/models/repo"
@@ -275,17 +276,16 @@ func handlePullRequestAutoMerge(pullID int64, sha string) {
275276
}
276277

277278
// Merge if all checks succeeded
278-
doer, err := user_model.GetUserByID(ctx, scheduledPRM.DoerID)
279+
// Use GetPossibleUserByID to allow merging by deleted users or bot users
280+
doer, err := user_model.GetPossibleUserByID(ctx, scheduledPRM.DoerID)
279281
if err != nil {
280282
log.Error("Unable to get scheduled User[%d]: %v", scheduledPRM.DoerID, err)
281283
return
282284
}
283285

284-
perm, err := access_model.GetUserRepoPermission(ctx, pr.HeadRepo, doer)
285-
if err != nil {
286-
log.Error("GetUserRepoPermission %-v: %v", pr.HeadRepo, err)
287-
return
288-
}
286+
// We don't check doer's permission here because their permissions have been checked
287+
// before ids were stored to the auto_merge table
288+
perm := access_model.Permission{AccessMode: perm.AccessModeWrite}
289289

290290
if err := pull_service.CheckPullMergeable(ctx, doer, &perm, pr, pull_service.MergeCheckTypeGeneral, false); err != nil {
291291
if errors.Is(err, pull_service.ErrUserNotAllowedToMerge) {

services/pull/merge.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"code.gitea.io/gitea/models/db"
1818
git_model "code.gitea.io/gitea/models/git"
1919
issues_model "code.gitea.io/gitea/models/issues"
20+
"code.gitea.io/gitea/models/perm"
2021
access_model "code.gitea.io/gitea/models/perm/access"
2122
repo_model "code.gitea.io/gitea/models/repo"
2223
"code.gitea.io/gitea/models/unit"
@@ -331,6 +332,9 @@ func doMergeAndPush(ctx context.Context, pr *issues_model.PullRequest, doer *use
331332
)
332333

333334
mergeCtx.env = append(mergeCtx.env, repo_module.EnvPushTrigger+"="+string(pushTrigger))
335+
if pushTrigger == repo_module.PushTriggerPRMergeToBase {
336+
mergeCtx.env = append(mergeCtx.env, fmt.Sprintf("%s=%d", repo_module.EnvActionPerm, perm.AccessModeWrite))
337+
}
334338
pushCmd := git.NewCommand(ctx, "push", "origin").AddDynamicArguments(baseBranch + ":" + git.BranchPrefix + pr.BaseBranch)
335339

336340
// Push back to upstream.

0 commit comments

Comments
 (0)