aboutsummaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
Diffstat (limited to 'models')
-rw-r--r--models/migrations/migrations.go4
-rw-r--r--models/migrations/v1_25/main_test.go14
-rw-r--r--models/migrations/v1_25/v321.go52
-rw-r--r--models/migrations/v1_25/v321_test.go70
-rw-r--r--models/packages/package_property.go2
-rw-r--r--models/system/notice.go2
6 files changed, 142 insertions, 2 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 176372486e..4f899453b5 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -24,6 +24,7 @@ import (
"code.gitea.io/gitea/models/migrations/v1_22"
"code.gitea.io/gitea/models/migrations/v1_23"
"code.gitea.io/gitea/models/migrations/v1_24"
+ "code.gitea.io/gitea/models/migrations/v1_25"
"code.gitea.io/gitea/models/migrations/v1_6"
"code.gitea.io/gitea/models/migrations/v1_7"
"code.gitea.io/gitea/models/migrations/v1_8"
@@ -382,6 +383,9 @@ func prepareMigrationTasks() []*migration {
newMigration(318, "Add anonymous_access_mode for repo_unit", v1_24.AddRepoUnitAnonymousAccessMode),
newMigration(319, "Add ExclusiveOrder to Label table", v1_24.AddExclusiveOrderColumnToLabelTable),
newMigration(320, "Migrate two_factor_policy to login_source table", v1_24.MigrateSkipTwoFactor),
+
+ // Gitea 1.24.0 ends at database version 321
+ newMigration(321, "Use LONGTEXT for some columns and fix review_state.updated_files column", v1_25.UseLongTextInSomeColumnsAndFixBugs),
}
return preparedMigrations
}
diff --git a/models/migrations/v1_25/main_test.go b/models/migrations/v1_25/main_test.go
new file mode 100644
index 0000000000..d2c4a4105d
--- /dev/null
+++ b/models/migrations/v1_25/main_test.go
@@ -0,0 +1,14 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_25
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models/migrations/base"
+)
+
+func TestMain(m *testing.M) {
+ base.MainTest(m)
+}
diff --git a/models/migrations/v1_25/v321.go b/models/migrations/v1_25/v321.go
new file mode 100644
index 0000000000..73ef180f48
--- /dev/null
+++ b/models/migrations/v1_25/v321.go
@@ -0,0 +1,52 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_25
+
+import (
+ "code.gitea.io/gitea/models/migrations/base"
+ "code.gitea.io/gitea/modules/setting"
+
+ "xorm.io/xorm"
+ "xorm.io/xorm/schemas"
+)
+
+func UseLongTextInSomeColumnsAndFixBugs(x *xorm.Engine) error {
+ if !setting.Database.Type.IsMySQL() {
+ return nil // Only mysql need to change from text to long text, for other databases, they are the same
+ }
+
+ if err := base.ModifyColumn(x, "review_state", &schemas.Column{
+ Name: "updated_files",
+ SQLType: schemas.SQLType{
+ Name: "LONGTEXT",
+ },
+ Length: 0,
+ Nullable: false,
+ DefaultIsEmpty: true,
+ }); err != nil {
+ return err
+ }
+
+ if err := base.ModifyColumn(x, "package_property", &schemas.Column{
+ Name: "value",
+ SQLType: schemas.SQLType{
+ Name: "LONGTEXT",
+ },
+ Length: 0,
+ Nullable: false,
+ DefaultIsEmpty: true,
+ }); err != nil {
+ return err
+ }
+
+ return base.ModifyColumn(x, "notice", &schemas.Column{
+ Name: "description",
+ SQLType: schemas.SQLType{
+ Name: "LONGTEXT",
+ },
+ Length: 0,
+ Nullable: false,
+ DefaultIsEmpty: true,
+ })
+}
diff --git a/models/migrations/v1_25/v321_test.go b/models/migrations/v1_25/v321_test.go
new file mode 100644
index 0000000000..4897783fd3
--- /dev/null
+++ b/models/migrations/v1_25/v321_test.go
@@ -0,0 +1,70 @@
+// Copyright 2025 The Gitea Authors. All rights reserved.
+// SPDX-License-Identifier: MIT
+
+package v1_25
+
+import (
+ "testing"
+
+ "code.gitea.io/gitea/models/migrations/base"
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/timeutil"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func Test_UseLongTextInSomeColumnsAndFixBugs(t *testing.T) {
+ if !setting.Database.Type.IsMySQL() {
+ t.Skip("Only MySQL needs to change from TEXT to LONGTEXT")
+ }
+
+ type ReviewState struct {
+ ID int64 `xorm:"pk autoincr"`
+ UserID int64 `xorm:"NOT NULL UNIQUE(pull_commit_user)"`
+ PullID int64 `xorm:"NOT NULL INDEX UNIQUE(pull_commit_user) DEFAULT 0"` // Which PR was the review on?
+ CommitSHA string `xorm:"NOT NULL VARCHAR(64) UNIQUE(pull_commit_user)"` // Which commit was the head commit for the review?
+ UpdatedFiles map[string]int `xorm:"NOT NULL TEXT JSON"` // Stores for each of the changed files of a PR whether they have been viewed, changed since last viewed, or not viewed
+ UpdatedUnix timeutil.TimeStamp `xorm:"updated"` // Is an accurate indicator of the order of commits as we do not expect it to be possible to make reviews on previous commits
+ }
+
+ type PackageProperty struct {
+ ID int64 `xorm:"pk autoincr"`
+ RefType int `xorm:"INDEX NOT NULL"`
+ RefID int64 `xorm:"INDEX NOT NULL"`
+ Name string `xorm:"INDEX NOT NULL"`
+ Value string `xorm:"TEXT NOT NULL"`
+ }
+
+ type Notice struct {
+ ID int64 `xorm:"pk autoincr"`
+ Type int
+ Description string `xorm:"LONGTEXT"`
+ CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
+ }
+
+ // Prepare and load the testing database
+ x, deferable := base.PrepareTestEnv(t, 0, new(ReviewState), new(PackageProperty), new(Notice))
+ defer deferable()
+
+ assert.NoError(t, UseLongTextInSomeColumnsAndFixBugs(x))
+
+ tables, err := x.DBMetas()
+ assert.NoError(t, err)
+
+ for _, table := range tables {
+ switch table.Name {
+ case "review_state":
+ column := table.GetColumn("updated_files")
+ assert.NotNil(t, column)
+ assert.Equal(t, "LONGTEXT", column.SQLType.Name)
+ case "package_property":
+ column := table.GetColumn("value")
+ assert.NotNil(t, column)
+ assert.Equal(t, "LONGTEXT", column.SQLType.Name)
+ case "notice":
+ column := table.GetColumn("description")
+ assert.NotNil(t, column)
+ assert.Equal(t, "LONGTEXT", column.SQLType.Name)
+ }
+ }
+}
diff --git a/models/packages/package_property.go b/models/packages/package_property.go
index 7ddbfd97e9..acc05d8d5a 100644
--- a/models/packages/package_property.go
+++ b/models/packages/package_property.go
@@ -32,7 +32,7 @@ type PackageProperty struct {
RefType PropertyType `xorm:"INDEX NOT NULL"`
RefID int64 `xorm:"INDEX NOT NULL"`
Name string `xorm:"INDEX NOT NULL"`
- Value string `xorm:"TEXT NOT NULL"`
+ Value string `xorm:"LONGTEXT NOT NULL"`
}
// InsertProperty creates a property
diff --git a/models/system/notice.go b/models/system/notice.go
index e7ec6a9693..91bf4be0f6 100644
--- a/models/system/notice.go
+++ b/models/system/notice.go
@@ -29,7 +29,7 @@ const (
type Notice struct {
ID int64 `xorm:"pk autoincr"`
Type NoticeType
- Description string `xorm:"TEXT"`
+ Description string `xorm:"LONGTEXT"`
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
}