refactor: prepare to decouple the "model migration" package and "models" package (#38533)

Migrations should never use model structs directly, because the model
structs can be different in different releases. e.g. if one migration uses
"User" model, it works in the early releases, then one day, when the
User model changes, the migration breaks because it will use the
new (incorrect) User model, it should only use the old User model.

The same to "modules/structs".

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: delvh <dev.lh@web.de>
This commit is contained in:
wxiaoguang
2026-07-20 03:42:02 +00:00
committed by GitHub
co-authored by delvh
parent 775e3bdb34
commit fff32e9469
378 changed files with 708 additions and 721 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ include_file = ["main.go"]
include_dir = ["cmd", "models", "modules", "options", "routers", "services"]
exclude_dir = [
"models/fixtures",
"models/migrations/fixtures",
"modelmigration/fixtures",
"modules/avatar/identicon/testdata",
"modules/avatar/testdata",
"modules/git/tests",
+3 -4
View File
@@ -53,9 +53,9 @@ linters:
desc: use builtin errors package instead
migrations:
files:
- '**/models/migrations/**/*.go'
- '**/modelmigration/**/*.go'
deny:
- pkg: gitea.dev/models$
- pkg: gitea.dev/models$ # FIXME: it should deny all sub packages like "gitea.dev/models/repo"
desc: migrations must not depend on the models package
- pkg: gitea.dev/modules/structs
desc: migrations must not depend on modules/structs (API structures change over time)
@@ -134,8 +134,7 @@ linters:
path: _test\.go
- linters:
- dupl
- errcheck
path: models/migrations/v
path: modelmigration/v
- linters:
- forbidigo
path: cmd
+3 -3
View File
@@ -113,8 +113,8 @@ LDFLAGS := $(LDFLAGS) -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)"
LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64,linux/riscv64
GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list gitea.dev/models/migrations/...) gitea.dev/tests/integration/migration-test gitea.dev/tests gitea.dev/tests/integration,$(shell $(GO) list ./... | grep -v /vendor/))
MIGRATE_TEST_PACKAGES ?= $(shell $(GO) list gitea.dev/models/migrations/...)
GO_TEST_PACKAGES ?= $(filter-out $(shell $(GO) list gitea.dev/modelmigration/...) gitea.dev/tests/integration/migration-test gitea.dev/tests gitea.dev/tests/integration,$(shell $(GO) list ./... | grep -v /vendor/))
MIGRATE_TEST_PACKAGES ?= $(shell $(GO) list gitea.dev/modelmigration/...)
FRONTEND_SOURCES := $(shell find web_src/js web_src/css -type f)
FRONTEND_CONFIGS := vite.config.ts tailwind.config.ts
@@ -477,7 +477,7 @@ migrations.individual.test:
.PHONY: migrations.individual.test\#%
migrations.individual.test\#%:
$(GO) test $(GOTEST_FLAGS) -tags '$(TAGS)' gitea.dev/models/migrations/$*
$(GO) test $(GOTEST_FLAGS) -tags '$(TAGS)' gitea.dev/modelmigration/$*
.PHONY: playwright
playwright: deps-frontend
+4 -4
View File
@@ -12,9 +12,9 @@ import (
"strings"
"text/tabwriter"
"gitea.dev/modelmigration"
"gitea.dev/modelmigration/base"
"gitea.dev/models/db"
"gitea.dev/models/migrations"
migrate_base "gitea.dev/models/migrations/base"
"gitea.dev/modules/container"
"gitea.dev/modules/log"
"gitea.dev/modules/setting"
@@ -129,10 +129,10 @@ func runRecreateTable(ctx context.Context, cmd *cli.Command) error {
if err != nil {
return err
}
recreateTables := migrate_base.RecreateTables(beans...)
recreateTables := base.RecreateTables(beans...)
return db.InitEngineWithMigration(context.Background(), func(ctx context.Context, x db.EngineMigration) error {
if err := migrations.EnsureUpToDate(ctx, x); err != nil {
if err := modelmigration.EnsureUpToDate(ctx, x); err != nil {
return err
}
return recreateTables(x)
+4 -4
View File
@@ -53,10 +53,10 @@ For packagers who need to use paths like `/etc/gitea/app.ini`,
they should define these values at build time for `make build` by environment variable like
`LDFLAGS='-X "module.Var1=Value1" -X "module.Var2=Value2"' TAGS="bindata" make build`.
- _`CustomConf`_: `-X "code.gitea.io/gitea/modules/setting.CustomConf=/etc/gitea/app.ini"`
- _`AppWorkPath`_: `-X "code.gitea.io/gitea/modules/setting.AppWorkPath=/var/lib/gitea"`
- _`CustomPath`_: `-X "code.gitea.io/gitea/modules/setting.CustomPath=/var/lib/gitea/custom"`
- Default PID file location: `-X "code.gitea.io/gitea/cmd.PIDFile=/run/gitea.pid"`
- _`CustomConf`_: `-X "gitea.dev/modules/setting.CustomConf=/etc/gitea/app.ini"`
- _`AppWorkPath`_: `-X "gitea.dev/modules/setting.AppWorkPath=/var/lib/gitea"`
- _`CustomPath`_: `-X "gitea.dev/modules/setting.CustomPath=/var/lib/gitea/custom"`
- Default PID file location: `-X "gitea.dev/cmd.PIDFile=/run/gitea.pid"`
Add as many of the strings with their preceding `-X` to the `LDFLAGS` variable and run `make build`
with the appropriate `TAGS` as above.
+1 -1
View File
@@ -109,7 +109,7 @@ which lives in the [documentation repository](https://gitea.com/gitea/docs).
## Database migrations
If you make breaking changes to a database-persisted struct under `models/`, add a
new migration in `models/migrations/`. See [testing.md](testing.md#migration-tests)
new migration in `modelmigration/`. See [testing.md](testing.md#migration-tests)
for running the migration tests.
## Testing
+1 -1
View File
@@ -23,7 +23,7 @@ The backend is split into top-level packages, each with a focused responsibility
dependencies to a minimum
- `models/db`: core database operations
- `models/fixtures`: sample data used by tests
- `models/migrations`: schema migration scripts
- `modelmigration`: schema migration scripts
- `modules`: standalone functionality with few dependencies
- `modules/setting`: configuration handling
- `modules/git`: interaction with the Git command line
+1 -1
View File
@@ -136,7 +136,7 @@ Useful environment variables:
## Migration tests
If you change a database-persisted struct under `models/` you will usually need a
new migration in `models/migrations/`. Run the migration tests with:
new migration in `modelmigration`. Run the migration tests with:
```bash
make test-migration
@@ -18,10 +18,21 @@ import (
"xorm.io/xorm/schemas"
)
// Migrations should never use model structs directly, because the model structs can be different in different releases.
// e.g. if one migration uses "User" model, it works in the early releases, then one day,
// when the User model changes, the migration breaks because it will use the new (incorrect) User model,
// it should only use the old User model. The same to "modules/structs".
// However, many the existing migrations already abuses "modules/structs" (search "gitea.dev/models/" in the migrations).
// TODO: need to fully decouple the migration package and models & structs package
type (
EngineMigration = db.EngineMigration
Session = db.Session
)
// RecreateTables will recreate the tables for the provided beans using the newly provided bean definition and move all data to that new table
// WARNING: YOU MUST PROVIDE THE FULL BEAN DEFINITION
func RecreateTables(beans ...any) func(db.EngineMigration) error {
return func(x db.EngineMigration) error {
func RecreateTables(beans ...any) func(EngineMigration) error {
return func(x EngineMigration) error {
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
@@ -41,7 +52,7 @@ func RecreateTables(beans ...any) func(db.EngineMigration) error {
// RecreateTable will recreate the table using the newly provided bean definition and move all data to that new table
// WARNING: YOU MUST PROVIDE THE FULL BEAN DEFINITION
// WARNING: YOU MUST COMMIT THE SESSION AT THE END
func RecreateTable(sess db.Session, bean any) error {
func RecreateTable(sess Session, bean any) error {
// TODO: This will not work if there are foreign keys
tableName := sess.Engine().TableName(bean)
@@ -304,7 +315,7 @@ func RecreateTable(sess db.Session, bean any) error {
}
// WARNING: YOU MUST COMMIT THE SESSION AT THE END
func DropTableColumns(sess db.Session, tableName string, columnNames ...string) (err error) {
func DropTableColumns(sess Session, tableName string, columnNames ...string) (err error) {
if tableName == "" || len(columnNames) == 0 {
return nil
}
@@ -474,7 +485,7 @@ func DropTableColumns(sess db.Session, tableName string, columnNames ...string)
}
// ModifyColumn will modify column's type or other property. SQLITE is not supported
func ModifyColumn(x db.EngineMigration, tableName string, col *schemas.Column) error {
func ModifyColumn(x EngineMigration, tableName string, col *schemas.Column) error {
var indexes map[string]*schemas.Index
var err error
// MSSQL have to remove index at first, otherwise alter column will fail
@@ -1,12 +1,13 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package base
package base_test
import (
"testing"
"gitea.dev/models/migrations/migrationtest"
"gitea.dev/modelmigration/base"
"gitea.dev/modelmigration/migrationtest"
"gitea.dev/modules/timeutil"
"xorm.io/xorm/names"
@@ -55,7 +56,7 @@ func Test_DropTableColumns(t *testing.T) {
t.Errorf("unable to begin transaction: %v", err)
return
}
if err := DropTableColumns(sess, "drop_test", columns[i:]...); err != nil {
if err := base.DropTableColumns(sess, "drop_test", columns[i:]...); err != nil {
sess.Close()
t.Errorf("Unable to drop columns[%d:]: %s from drop_test: %v", i, columns[i:], err)
return
@@ -82,7 +83,7 @@ func Test_DropTableColumns(t *testing.T) {
t.Errorf("unable to begin transaction: %v", err)
return
}
if err := DropTableColumns(sess, "drop_test", dropcols...); err != nil {
if err := base.DropTableColumns(sess, "drop_test", dropcols...); err != nil {
sess.Close()
t.Errorf("Unable to drop columns: %s from drop_test: %v", dropcols, err)
return
@@ -2,36 +2,36 @@
// Copyright 2017 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package migrations
package modelmigration
import (
"context"
"errors"
"fmt"
"gitea.dev/models/db"
"gitea.dev/models/migrations/v1_10"
"gitea.dev/models/migrations/v1_11"
"gitea.dev/models/migrations/v1_12"
"gitea.dev/models/migrations/v1_13"
"gitea.dev/models/migrations/v1_14"
"gitea.dev/models/migrations/v1_15"
"gitea.dev/models/migrations/v1_16"
"gitea.dev/models/migrations/v1_17"
"gitea.dev/models/migrations/v1_18"
"gitea.dev/models/migrations/v1_19"
"gitea.dev/models/migrations/v1_20"
"gitea.dev/models/migrations/v1_21"
"gitea.dev/models/migrations/v1_22"
"gitea.dev/models/migrations/v1_23"
"gitea.dev/models/migrations/v1_24"
"gitea.dev/models/migrations/v1_25"
"gitea.dev/models/migrations/v1_26"
"gitea.dev/models/migrations/v1_27"
"gitea.dev/models/migrations/v1_6"
"gitea.dev/models/migrations/v1_7"
"gitea.dev/models/migrations/v1_8"
"gitea.dev/models/migrations/v1_9"
"gitea.dev/modelmigration/base"
"gitea.dev/modelmigration/v1_10"
"gitea.dev/modelmigration/v1_11"
"gitea.dev/modelmigration/v1_12"
"gitea.dev/modelmigration/v1_13"
"gitea.dev/modelmigration/v1_14"
"gitea.dev/modelmigration/v1_15"
"gitea.dev/modelmigration/v1_16"
"gitea.dev/modelmigration/v1_17"
"gitea.dev/modelmigration/v1_18"
"gitea.dev/modelmigration/v1_19"
"gitea.dev/modelmigration/v1_20"
"gitea.dev/modelmigration/v1_21"
"gitea.dev/modelmigration/v1_22"
"gitea.dev/modelmigration/v1_23"
"gitea.dev/modelmigration/v1_24"
"gitea.dev/modelmigration/v1_25"
"gitea.dev/modelmigration/v1_26"
"gitea.dev/modelmigration/v1_27"
"gitea.dev/modelmigration/v1_6"
"gitea.dev/modelmigration/v1_7"
"gitea.dev/modelmigration/v1_8"
"gitea.dev/modelmigration/v1_9"
"gitea.dev/modules/git"
"gitea.dev/modules/log"
"gitea.dev/modules/setting"
@@ -44,23 +44,23 @@ const minDBVersion = 70 // Gitea 1.5.3
type migration struct {
idNumber int64 // DB version is "the last migration's idNumber" + 1
description string
migrate func(context.Context, db.EngineMigration) error
migrate func(context.Context, base.EngineMigration) error
}
// newMigration creates a new migration
func newMigration[T func(db.EngineMigration) error | func(context.Context, db.EngineMigration) error](idNumber int64, desc string, fn T) *migration {
func newMigration[T func(base.EngineMigration) error | func(context.Context, base.EngineMigration) error](idNumber int64, desc string, fn T) *migration {
m := &migration{idNumber: idNumber, description: desc}
var ok bool
if m.migrate, ok = any(fn).(func(context.Context, db.EngineMigration) error); !ok {
m.migrate = func(ctx context.Context, x db.EngineMigration) error {
return any(fn).(func(db.EngineMigration) error)(x)
if m.migrate, ok = any(fn).(func(context.Context, base.EngineMigration) error); !ok {
m.migrate = func(ctx context.Context, x base.EngineMigration) error {
return any(fn).(func(base.EngineMigration) error)(x)
}
}
return m
}
// Migrate executes the migration
func (m *migration) Migrate(ctx context.Context, x db.EngineMigration) error {
func (m *migration) Migrate(ctx context.Context, x base.EngineMigration) error {
return m.migrate(ctx, x)
}
@@ -71,7 +71,7 @@ type Version struct {
}
// Use noopMigration when there is a migration that has been no-oped
var noopMigration = func(_ db.EngineMigration) error { return nil }
var noopMigration = func(_ base.EngineMigration) error { return nil }
var preparedMigrations []*migration
@@ -420,12 +420,13 @@ func prepareMigrationTasks() []*migration {
newMigration(340, "Add ContinueOnError column to ActionRunJob", v1_27.AddContinueOnErrorToActionRunJob),
newMigration(341, "Convert legacy MSSQL DATETIME columns to DATETIME2", v1_27.FixLegacyMSSQLDateTimeColumns),
newMigration(342, "Add scoped workflows schema", v1_27.AddScopedWorkflowsSchema),
// Gitea 1.27.0 ends at migration ID number 342 (database version 343)
}
return preparedMigrations
}
// GetCurrentDBVersion returns the current db version
func GetCurrentDBVersion(x db.EngineMigration) (int64, error) {
func GetCurrentDBVersion(x base.EngineMigration) (int64, error) {
if err := x.Sync(new(Version)); err != nil {
return -1, fmt.Errorf("sync: %w", err)
}
@@ -458,7 +459,7 @@ func ExpectedDBVersion() int64 {
}
// EnsureUpToDate will check if the db is at the correct version
func EnsureUpToDate(ctx context.Context, x db.EngineMigration) error {
func EnsureUpToDate(ctx context.Context, x base.EngineMigration) error {
currentDB, err := GetCurrentDBVersion(x)
if err != nil {
return err
@@ -490,7 +491,7 @@ func migrationIDNumberToDBVersion(idNumber int64) int64 {
}
// Migrate database to current version
func Migrate(ctx context.Context, x db.EngineMigration) error {
func Migrate(ctx context.Context, x base.EngineMigration) error {
migrations := prepareMigrationTasks()
maxDBVer := calcDBVersion(migrations)
@@ -1,7 +1,7 @@
// Copyright 2024 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package migrations
package modelmigration
import (
"testing"
@@ -8,6 +8,7 @@ import (
"path/filepath"
"testing"
"gitea.dev/modelmigration/base"
"gitea.dev/models/db"
"gitea.dev/models/unittest"
"gitea.dev/modules/git"
@@ -22,8 +23,8 @@ import (
// PrepareTestEnv prepares the test environment and reset the database. The skip parameter should usually be 0.
// Provide models to be sync'd with the database - in particular any models you expect fixtures to be loaded from.
//
// fixtures in `models/migrations/fixtures/<TestName>` will be loaded automatically
func PrepareTestEnv(t *testing.T, skip int, syncModels ...any) (db.EngineMigration, func()) {
// fixtures in `modelmigration/fixtures/<TestName>` will be loaded automatically
func PrepareTestEnv(t *testing.T, skip int, syncModels ...any) (base.EngineMigration, func()) {
t.Helper()
ourSkip := 2
ourSkip += skip
@@ -64,7 +65,7 @@ func PrepareTestEnv(t *testing.T, skip int, syncModels ...any) (db.EngineMigrati
}
}
fixturesDir := filepath.Join(giteaRoot, "models", "migrations", "fixtures", t.Name())
fixturesDir := filepath.Join(giteaRoot, "modelmigration/fixtures", t.Name())
if _, err := os.Stat(fixturesDir); err == nil {
t.Logf("initializing fixtures from: %s", fixturesDir)
@@ -88,7 +89,7 @@ func PrepareTestEnv(t *testing.T, skip int, syncModels ...any) (db.EngineMigrati
return x, deferFn
}
func LoadTableSchemasMap(t *testing.T, x db.EngineMigration) map[string]*schemas.Table {
func LoadTableSchemasMap(t *testing.T, x base.EngineMigration) map[string]*schemas.Table {
tables, err := x.DBMetas()
require.NoError(t, err)
tableMap := make(map[string]*schemas.Table)
@@ -8,10 +8,10 @@ import (
"strings"
"time"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func UpdateMigrationServiceTypes(x db.EngineMigration) error {
func UpdateMigrationServiceTypes(x base.EngineMigration) error {
type Repository struct {
ID int64
OriginalServiceType int `xorm:"index default(0)"`
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func ChangeSomeColumnsLengthOfExternalLoginUser(x db.EngineMigration) error {
func ChangeSomeColumnsLengthOfExternalLoginUser(x base.EngineMigration) error {
type ExternalLoginUser struct {
AccessToken string `xorm:"TEXT"`
AccessTokenSecret string `xorm:"TEXT"`
@@ -7,14 +7,14 @@ import (
"crypto/sha1"
"fmt"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func hashContext(context string) string {
return fmt.Sprintf("%x", sha1.Sum([]byte(context)))
}
func AddCommitStatusContext(x db.EngineMigration) error {
func AddCommitStatusContext(x base.EngineMigration) error {
type CommitStatus struct {
ID int64 `xorm:"pk autoincr"`
ContextHash string `xorm:"char(40) index"`
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddOriginalMigrationInfo(x db.EngineMigration) error {
func AddOriginalMigrationInfo(x base.EngineMigration) error {
// Issue see models/issue.go
type Issue struct {
OriginalAuthor string
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func ChangeSomeColumnsLengthOfRepo(x db.EngineMigration) error {
func ChangeSomeColumnsLengthOfRepo(x base.EngineMigration) error {
type Repository struct {
ID int64 `xorm:"pk autoincr"`
Description string `xorm:"TEXT"`
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddIndexOnRepositoryAndComment(x db.EngineMigration) error {
func AddIndexOnRepositoryAndComment(x base.EngineMigration) error {
type Repository struct {
ID int64 `xorm:"pk autoincr"`
OwnerID int64 `xorm:"index"`
@@ -4,12 +4,12 @@
package v1_10
import (
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"xorm.io/builder"
)
func RemoveLingeringIndexStatus(x db.EngineMigration) error {
func RemoveLingeringIndexStatus(x base.EngineMigration) error {
_, err := x.Exec(builder.Delete(builder.NotIn("`repo_id`", builder.Select("`id`").From("`repository`"))).From("`repo_indexer_status`"))
return err
}
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddEmailNotificationEnabledToUser(x db.EngineMigration) error {
func AddEmailNotificationEnabledToUser(x base.EngineMigration) error {
// User see models/user.go
type User struct {
EmailNotificationsPreference string `xorm:"VARCHAR(20) NOT NULL DEFAULT 'enabled'"`
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddStatusCheckColumnsForProtectedBranches(x db.EngineMigration) error {
func AddStatusCheckColumnsForProtectedBranches(x base.EngineMigration) error {
type ProtectedBranch struct {
EnableStatusCheck bool `xorm:"NOT NULL DEFAULT false"`
StatusCheckContexts []string `xorm:"JSON TEXT"`
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddCrossReferenceColumns(x db.EngineMigration) error {
func AddCrossReferenceColumns(x base.EngineMigration) error {
// Comment see models/comment.go
type Comment struct {
RefRepoID int64 `xorm:"index"`
@@ -6,12 +6,12 @@ package v1_10
import (
"path/filepath"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/setting"
"gitea.dev/modules/util"
)
func DeleteOrphanedAttachments(x db.EngineMigration) error {
func DeleteOrphanedAttachments(x base.EngineMigration) error {
type Attachment struct {
ID int64 `xorm:"pk autoincr"`
UUID string `xorm:"uuid UNIQUE"`
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddRepoAdminChangeTeamAccessColumnForUser(x db.EngineMigration) error {
func AddRepoAdminChangeTeamAccessColumnForUser(x base.EngineMigration) error {
type User struct {
RepoAdminChangeTeamAccess bool `xorm:"NOT NULL DEFAULT false"`
}
@@ -3,9 +3,9 @@
package v1_10
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddOriginalAuthorOnMigratedReleases(x db.EngineMigration) error {
func AddOriginalAuthorOnMigratedReleases(x base.EngineMigration) error {
type Release struct {
ID int64
OriginalAuthor string
@@ -4,11 +4,11 @@
package v1_10
import (
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/timeutil"
)
func AddTaskTable(x db.EngineMigration) error {
func AddTaskTable(x base.EngineMigration) error {
// TaskType defines task type
type TaskType int
@@ -4,11 +4,10 @@
package v1_11
import (
"gitea.dev/models/db"
"gitea.dev/models/migrations/base"
"gitea.dev/modelmigration/base"
)
func DropColumnHeadUserNameOnPullRequest(x db.EngineMigration) error {
func DropColumnHeadUserNameOnPullRequest(x base.EngineMigration) error {
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
@@ -3,9 +3,9 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddWhitelistDeployKeysToBranches(x db.EngineMigration) error {
func AddWhitelistDeployKeysToBranches(x base.EngineMigration) error {
type ProtectedBranch struct {
ID int64
WhitelistDeployKeys bool `xorm:"NOT NULL DEFAULT false"`
@@ -4,11 +4,10 @@
package v1_11
import (
"gitea.dev/models/db"
"gitea.dev/models/migrations/base"
"gitea.dev/modelmigration/base"
)
func RemoveLabelUneededCols(x db.EngineMigration) error {
func RemoveLabelUneededCols(x base.EngineMigration) error {
// Make sure the columns exist before dropping them
type Label struct {
QueryString string
@@ -3,9 +3,9 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddTeamIncludesAllRepositories(x db.EngineMigration) error {
func AddTeamIncludesAllRepositories(x base.EngineMigration) error {
type Team struct {
ID int64 `xorm:"pk autoincr"`
IncludesAllRepositories bool `xorm:"NOT NULL DEFAULT false"`
@@ -3,7 +3,7 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
// RepoWatchMode specifies what kind of watch the user has on a repository
type RepoWatchMode int8
@@ -14,7 +14,7 @@ type Watch struct {
Mode RepoWatchMode `xorm:"SMALLINT NOT NULL DEFAULT 1"`
}
func AddModeColumnToWatch(x db.EngineMigration) error {
func AddModeColumnToWatch(x base.EngineMigration) error {
if err := x.Sync(new(Watch)); err != nil {
return err
}
@@ -3,9 +3,9 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddTemplateToRepo(x db.EngineMigration) error {
func AddTemplateToRepo(x base.EngineMigration) error {
type Repository struct {
IsTemplate bool `xorm:"INDEX NOT NULL DEFAULT false"`
TemplateID int64 `xorm:"INDEX"`
@@ -3,9 +3,9 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddCommentIDOnNotification(x db.EngineMigration) error {
func AddCommentIDOnNotification(x base.EngineMigration) error {
type Notification struct {
ID int64 `xorm:"pk autoincr"`
CommentID int64
@@ -3,9 +3,9 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddCanCreateOrgRepoColumnForTeam(x db.EngineMigration) error {
func AddCanCreateOrgRepoColumnForTeam(x base.EngineMigration) error {
type Team struct {
CanCreateOrgRepo bool `xorm:"NOT NULL DEFAULT false"`
}
@@ -4,12 +4,12 @@
package v1_11
import (
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"xorm.io/xorm/schemas"
)
func ChangeReviewContentToText(x db.EngineMigration) error {
func ChangeReviewContentToText(x base.EngineMigration) error {
switch x.Dialect().URI().DBType {
case schemas.MYSQL:
_, err := x.Exec("ALTER TABLE review MODIFY COLUMN content TEXT")
@@ -7,10 +7,10 @@ import (
"fmt"
"slices"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func AddBranchProtectionCanPushAndEnableWhitelist(x db.EngineMigration) error {
func AddBranchProtectionCanPushAndEnableWhitelist(x base.EngineMigration) error {
type ProtectedBranch struct {
CanPush bool `xorm:"NOT NULL DEFAULT false"`
EnableApprovalsWhitelist bool `xorm:"NOT NULL DEFAULT false"`
@@ -132,7 +132,7 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x db.EngineMigration) error {
}
// getUserRepoPermission static function based on issues_model.IsOfficialReviewer at 5d78792385
getUserRepoPermission := func(sess db.Session, repo *Repository, user *User) (Permission, error) {
getUserRepoPermission := func(sess base.Session, repo *Repository, user *User) (Permission, error) {
var perm Permission
repoOwner := new(User)
@@ -305,7 +305,7 @@ func AddBranchProtectionCanPushAndEnableWhitelist(x db.EngineMigration) error {
}
// isOfficialReviewer static function based on 5d78792385
isOfficialReviewer := func(sess db.Session, issueID int64, reviewer *User) (bool, error) {
isOfficialReviewer := func(sess base.Session, issueID int64, reviewer *User) (bool, error) {
pr := new(PullRequest)
has, err := sess.ID(issueID).Get(pr)
if err != nil {
@@ -6,7 +6,7 @@ package v1_11
import (
"path/filepath"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/log"
"gitea.dev/modules/setting"
"gitea.dev/modules/util"
@@ -14,7 +14,7 @@ import (
"xorm.io/builder"
)
func RemoveAttachmentMissedRepo(x db.EngineMigration) error {
func RemoveAttachmentMissedRepo(x base.EngineMigration) error {
type Attachment struct {
UUID string `xorm:"uuid"`
}
@@ -6,10 +6,10 @@ package v1_11
import (
"fmt"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func FeatureChangeTargetBranch(x db.EngineMigration) error {
func FeatureChangeTargetBranch(x base.EngineMigration) error {
type Comment struct {
OldRef string
NewRef string
@@ -6,10 +6,10 @@ package v1_11
import (
"net/url"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func SanitizeOriginalURL(x db.EngineMigration) error {
func SanitizeOriginalURL(x base.EngineMigration) error {
type Repository struct {
ID int64
OriginalURL string `xorm:"VARCHAR(2048)"`
@@ -12,14 +12,14 @@ import (
"path/filepath"
"time"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/container"
"gitea.dev/modules/log"
"gitea.dev/modules/setting"
"gitea.dev/modules/util"
)
func RenameExistingUserAvatarName(x db.EngineMigration) error {
func RenameExistingUserAvatarName(x base.EngineMigration) error {
sess := x.NewSession()
defer sess.Close()
@@ -3,9 +3,9 @@
package v1_11
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func ExtendTrackedTimes(x db.EngineMigration) error {
func ExtendTrackedTimes(x base.EngineMigration) error {
type TrackedTime struct {
Time int64 `xorm:"NOT NULL"`
Deleted bool `xorm:"NOT NULL DEFAULT false"`
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddBlockOnRejectedReviews(x db.EngineMigration) error {
func AddBlockOnRejectedReviews(x base.EngineMigration) error {
type ProtectedBranch struct {
BlockOnRejectedReviews bool `xorm:"NOT NULL DEFAULT false"`
}
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddReviewCommitAndStale(x db.EngineMigration) error {
func AddReviewCommitAndStale(x base.EngineMigration) error {
type Review struct {
CommitID string `xorm:"VARCHAR(40)"`
Stale bool `xorm:"NOT NULL DEFAULT false"`
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func FixMigratedRepositoryServiceType(x db.EngineMigration) error {
func FixMigratedRepositoryServiceType(x base.EngineMigration) error {
// structs.GithubService:
// GithubService = 2
_, err := x.Exec("UPDATE repository SET original_service_type = ? WHERE original_url LIKE 'https://github.com/%'", 2)
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddOwnerNameOnRepository(x db.EngineMigration) error {
func AddOwnerNameOnRepository(x base.EngineMigration) error {
type Repository struct {
OwnerName string
}
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddIsRestricted(x db.EngineMigration) error {
func AddIsRestricted(x base.EngineMigration) error {
// User see models/user.go
type User struct {
ID int64 `xorm:"pk autoincr"`
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddRequireSignedCommits(x db.EngineMigration) error {
func AddRequireSignedCommits(x base.EngineMigration) error {
type ProtectedBranch struct {
RequireSignedCommits bool `xorm:"NOT NULL DEFAULT false"`
}
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddReactionOriginals(x db.EngineMigration) error {
func AddReactionOriginals(x base.EngineMigration) error {
type Reaction struct {
OriginalAuthorID int64 `xorm:"INDEX NOT NULL DEFAULT(0)"`
OriginalAuthor string
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func AddUserRepoMissingColumns(x db.EngineMigration) error {
func AddUserRepoMissingColumns(x base.EngineMigration) error {
type VisibleType int
type User struct {
PasswdHashAlgo string `xorm:"NOT NULL DEFAULT 'pbkdf2'"`
@@ -6,10 +6,10 @@ package v1_12
import (
"fmt"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func AddReviewMigrateInfo(x db.EngineMigration) error {
func AddReviewMigrateInfo(x base.EngineMigration) error {
type Review struct {
OriginalAuthor string
OriginalAuthorID int64
@@ -4,12 +4,12 @@
package v1_12
import (
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"xorm.io/builder"
)
func FixTopicRepositoryCount(x db.EngineMigration) error {
func FixTopicRepositoryCount(x base.EngineMigration) error {
_, err := x.Exec(builder.Delete(builder.NotIn("`repo_id`", builder.Select("`id`").From("`repository`"))).From("`repo_topic`"))
if err != nil {
return err
@@ -6,11 +6,11 @@ package v1_12
import (
"fmt"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/timeutil"
)
func AddLanguageStats(x db.EngineMigration) error {
func AddLanguageStats(x base.EngineMigration) error {
// LanguageStat see models/repo_language_stats.go
type LanguageStat struct {
ID int64 `xorm:"pk autoincr"`
@@ -11,14 +11,14 @@ import (
"strings"
"time"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/git"
"gitea.dev/modules/git/gitcmd"
"gitea.dev/modules/log"
"gitea.dev/modules/setting"
)
func FixMergeBase(ctx context.Context, x db.EngineMigration) error {
func FixMergeBase(ctx context.Context, x base.EngineMigration) error {
type Repository struct {
ID int64 `xorm:"pk autoincr"`
OwnerID int64 `xorm:"UNIQUE(s) index"`
@@ -114,7 +114,7 @@ func FixMergeBase(ctx context.Context, x db.EngineMigration) error {
}
}
pr.MergeBase = strings.TrimSpace(pr.MergeBase)
x.ID(pr.ID).Cols("merge_base").Update(pr)
_, _ = x.ID(pr.ID).Cols("merge_base").Update(pr)
i++
select {
case <-ticker.C:
@@ -3,9 +3,9 @@
package v1_12
import "gitea.dev/models/db"
import "gitea.dev/modelmigration/base"
func PurgeUnusedDependencies(x db.EngineMigration) error {
func PurgeUnusedDependencies(x base.EngineMigration) error {
if _, err := x.Exec("DELETE FROM issue_dependency WHERE issue_id NOT IN (SELECT id FROM issue)"); err != nil {
return err
}
@@ -4,12 +4,12 @@
package v1_12
import (
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
"gitea.dev/modules/json"
"gitea.dev/modules/setting"
)
func ExpandWebhooks(x db.EngineMigration) error {
func ExpandWebhooks(x base.EngineMigration) error {
type HookEvents struct {
Create bool `json:"create"`
Delete bool `json:"delete"`
@@ -6,10 +6,10 @@ package v1_12
import (
"fmt"
"gitea.dev/models/db"
"gitea.dev/modelmigration/base"
)
func AddSystemWebhookColumn(x db.EngineMigration) error {
func AddSystemWebhookColumn(x base.EngineMigration) error {
type Webhook struct {
IsSystemWebhook bool `xorm:"NOT NULL DEFAULT false"`
}

Some files were not shown because too many files have changed in this diff Show More