From 386d7c7249534695a1c23379bbd77177587f619c Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Sun, 21 Aug 2022 16:08:33 +0100 Subject: [PATCH] Increase Content field size of gpg_key and public_key to MEDIUMTEXT Unfortunately some keys are too big to fix within the 65535 limit of TEXT on MySQL this causes issues with these large keys. Therefore increase these fields to MEDIUMTEXT. Fix #20894 Signed-off-by: Andrew Thornton --- models/asymkey/gpg_key.go | 2 +- models/asymkey/ssh_key.go | 2 +- models/migrations/migrations.go | 7 ++++++- models/migrations/v224.go | 2 +- models/migrations/v225.go | 29 +++++++++++++++++++++++++++++ 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 models/migrations/v225.go diff --git a/models/asymkey/gpg_key.go b/models/asymkey/gpg_key.go index 21554d215053..78dc453e0de4 100644 --- a/models/asymkey/gpg_key.go +++ b/models/asymkey/gpg_key.go @@ -33,7 +33,7 @@ type GPGKey struct { OwnerID int64 `xorm:"INDEX NOT NULL"` KeyID string `xorm:"INDEX CHAR(16) NOT NULL"` PrimaryKeyID string `xorm:"CHAR(16)"` - Content string `xorm:"TEXT NOT NULL"` + Content string `xorm:"MEDIUMTEXT NOT NULL"` CreatedUnix timeutil.TimeStamp `xorm:"created"` ExpiredUnix timeutil.TimeStamp AddedUnix timeutil.TimeStamp diff --git a/models/asymkey/ssh_key.go b/models/asymkey/ssh_key.go index 107a29e985f7..9f95bb5baf8f 100644 --- a/models/asymkey/ssh_key.go +++ b/models/asymkey/ssh_key.go @@ -41,7 +41,7 @@ type PublicKey struct { OwnerID int64 `xorm:"INDEX NOT NULL"` Name string `xorm:"NOT NULL"` Fingerprint string `xorm:"INDEX NOT NULL"` - Content string `xorm:"TEXT NOT NULL"` + Content string `xorm:"MEDIUMTEXT NOT NULL"` Mode perm.AccessMode `xorm:"NOT NULL DEFAULT 2"` Type KeyType `xorm:"NOT NULL DEFAULT 1"` LoginSourceID int64 `xorm:"NOT NULL DEFAULT 0"` diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 30c4ad250c08..28ffc998860b 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -406,8 +406,13 @@ var migrations = []Migration{ NewMigration("Drop old CredentialID column", dropOldCredentialIDColumn), // v223 -> v224 NewMigration("Rename CredentialIDBytes column to CredentialID", renameCredentialIDBytes), + + // Gitea 1.17.0 ends at v224 + // v224 -> v225 - NewMigration("Add badges to users", creatUserBadgesTable), + NewMigration("Add badges to users", createUserBadgesTable), + // v225 -> v226 + NewMigration("Alter gpg_key/public_key content TEXT fields to MEDIUMTEXT", alterPublicGPGKeyContentFieldsToMediumText), } // GetCurrentDBVersion returns the current db version diff --git a/models/migrations/v224.go b/models/migrations/v224.go index d684d538df22..2ed161ef4da7 100644 --- a/models/migrations/v224.go +++ b/models/migrations/v224.go @@ -8,7 +8,7 @@ import ( "xorm.io/xorm" ) -func creatUserBadgesTable(x *xorm.Engine) error { +func createUserBadgesTable(x *xorm.Engine) error { type Badge struct { ID int64 `xorm:"pk autoincr"` Description string diff --git a/models/migrations/v225.go b/models/migrations/v225.go new file mode 100644 index 000000000000..6dd460eb68a9 --- /dev/null +++ b/models/migrations/v225.go @@ -0,0 +1,29 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package migrations + +import ( + "code.gitea.io/gitea/modules/setting" + + "xorm.io/xorm" +) + +func alterPublicGPGKeyContentFieldsToMediumText(x *xorm.Engine) error { + sess := x.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + + if setting.Database.UseMySQL { + if _, err := sess.Exec("ALTER TABLE `gpg_key` CHANGE `content` `content` MEDIUMTEXT"); err != nil { + return err + } + if _, err := sess.Exec("ALTER TABLE `public_key` CHANGE `content` `content` MEDIUMTEXT"); err != nil { + return err + } + } + return sess.Commit() +}