diff options
author | Giteabot <teabot@gitea.io> | 2023-08-30 05:26:40 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-29 21:26:40 +0000 |
commit | c3d323fd859539678ac10988945cbf7af057f766 (patch) | |
tree | c509286d94a1ece8b8b055c54f81116f1de6479a /modules/doctor | |
parent | 4013f3f6006076fa3ca8be191750d1eec5da754d (diff) | |
download | gitea-c3d323fd859539678ac10988945cbf7af057f766.tar.gz gitea-c3d323fd859539678ac10988945cbf7af057f766.zip |
Add fix incorrect can_create_org_repo for org owner team (#26683) (#26791)
Backport #26683 by @yp05327
Related to: #8312 #26491
In migration v109, we only added a new column `CanCreateOrgRepo` in Team
table, but not initial the value of it.
This may cause bug like #26491.
Co-authored-by: yp05327 <576951401@qq.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'modules/doctor')
-rw-r--r-- | modules/doctor/fix8312.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/modules/doctor/fix8312.go b/modules/doctor/fix8312.go new file mode 100644 index 0000000000..8de3113663 --- /dev/null +++ b/modules/doctor/fix8312.go @@ -0,0 +1,61 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package doctor + +import ( + "context" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/models/db" + org_model "code.gitea.io/gitea/models/organization" + "code.gitea.io/gitea/models/perm" + "code.gitea.io/gitea/modules/log" + + "xorm.io/builder" +) + +func fixOwnerTeamCreateOrgRepo(ctx context.Context, logger log.Logger, autofix bool) error { + count := 0 + + err := db.Iterate( + ctx, + builder.Eq{"authorize": perm.AccessModeOwner, "can_create_org_repo": false}, + func(ctx context.Context, team *org_model.Team) error { + team.CanCreateOrgRepo = true + count++ + + if !autofix { + return nil + } + + return models.UpdateTeam(team, false, false) + }, + ) + if err != nil { + logger.Critical("Unable to iterate across repounits to fix incorrect can_create_org_repo: Error %v", err) + return err + } + + if !autofix { + if count == 0 { + logger.Info("Found no team with incorrect can_create_org_repo") + } else { + logger.Warn("Found %d teams with incorrect can_create_org_repo", count) + } + return nil + } + logger.Info("Fixed %d teams with incorrect can_create_org_repo", count) + + return nil +} + +func init() { + Register(&Check{ + Title: "Check for incorrect can_create_org_repo for org owner teams", + Name: "fix-owner-team-create-org-repo", + IsDefault: false, + Run: fixOwnerTeamCreateOrgRepo, + Priority: 7, + }) +} |