]> source.dussan.org Git - gitea.git/commitdiff
Add fix incorrect can_create_org_repo for org owner team (#26683) (#26791)
authorGiteabot <teabot@gitea.io>
Tue, 29 Aug 2023 21:26:40 +0000 (05:26 +0800)
committerGitHub <noreply@github.com>
Tue, 29 Aug 2023 21:26:40 +0000 (21:26 +0000)
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>
modules/doctor/fix8312.go [new file with mode: 0644]

diff --git a/modules/doctor/fix8312.go b/modules/doctor/fix8312.go
new file mode 100644 (file)
index 0000000..8de3113
--- /dev/null
@@ -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,
+       })
+}