diff options
author | yp05327 <576951401@qq.com> | 2023-03-17 22:07:23 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-17 21:07:23 +0800 |
commit | 8e45fcb63aeedcf89a705227fa7675698d68d43c (patch) | |
tree | 8facfd85193ff8907673e3e1d1f8e33e27a4c44e /models | |
parent | 8120c0c20c42f46d08356064c7f7fe96fafcfade (diff) | |
download | gitea-8e45fcb63aeedcf89a705227fa7675698d68d43c.tar.gz gitea-8e45fcb63aeedcf89a705227fa7675698d68d43c.zip |
Do not store user projects as organization projects (#23353)
A part of https://github.com/go-gitea/gitea/pull/22865
At first, I think we do not need 3 ProjectTypes, as we can check user
type, but it seems that it is not database friendly.
---------
Co-authored-by: delvh <dev.lh@web.de>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: 6543 <6543@obermui.de>
Diffstat (limited to 'models')
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v1_20/v247.go | 50 | ||||
-rw-r--r-- | models/project/project.go | 2 | ||||
-rw-r--r-- | models/project/project_test.go | 2 |
4 files changed, 54 insertions, 2 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index d7a4d6e4b5..5401ae2fa6 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -471,6 +471,8 @@ var migrations = []Migration{ NewMigration("Rename Webhook org_id to owner_id", v1_20.RenameWebhookOrgToOwner), // v246 -> v247 NewMigration("Add missed column owner_id for project table", v1_20.AddNewColumnForProject), + // v247 -> v248 + NewMigration("Fix incorrect project type", v1_20.FixIncorrectProjectType), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v1_20/v247.go b/models/migrations/v1_20/v247.go new file mode 100644 index 0000000000..59fc5c46b5 --- /dev/null +++ b/models/migrations/v1_20/v247.go @@ -0,0 +1,50 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package v1_20 //nolint + +import ( + "code.gitea.io/gitea/modules/log" + + "xorm.io/xorm" +) + +// FixIncorrectProjectType: set individual project's type from 3(TypeOrganization) to 1(TypeIndividual) +func FixIncorrectProjectType(x *xorm.Engine) error { + type User struct { + ID int64 `xorm:"pk autoincr"` + Type int + } + + const ( + UserTypeIndividual int = 0 + + TypeIndividual uint8 = 1 + TypeOrganization uint8 = 3 + ) + + type Project struct { + OwnerID int64 `xorm:"INDEX"` + Type uint8 + Owner *User `xorm:"extends"` + } + + sess := x.NewSession() + defer sess.Close() + + if err := sess.Begin(); err != nil { + return err + } + + count, err := sess.Table("project"). + Where("type = ? AND owner_id IN (SELECT id FROM `user` WHERE type = ?)", TypeOrganization, UserTypeIndividual). + Update(&Project{ + Type: TypeIndividual, + }) + if err != nil { + return err + } + log.Debug("Updated %d projects to belong to a user instead of an organization", count) + + return sess.Commit() +} diff --git a/models/project/project.go b/models/project/project.go index f3ed723030..679d695881 100644 --- a/models/project/project.go +++ b/models/project/project.go @@ -172,7 +172,7 @@ func GetCardConfig() []CardConfig { // IsTypeValid checks if a project type is valid func IsTypeValid(p Type) bool { switch p { - case TypeRepository, TypeOrganization: + case TypeIndividual, TypeRepository, TypeOrganization: return true default: return false diff --git a/models/project/project_test.go b/models/project/project_test.go index 6caa244f54..71ceda7aa5 100644 --- a/models/project/project_test.go +++ b/models/project/project_test.go @@ -20,7 +20,7 @@ func TestIsProjectTypeValid(t *testing.T) { typ Type valid bool }{ - {TypeIndividual, false}, + {TypeIndividual, true}, {TypeRepository, true}, {TypeOrganization, true}, {UnknownType, false}, |