diff --git a/models/migrations/v1_23/v303.go b/models/migrations/v1_23/v303.go index c1e74c596a..e3ee180539 100644 --- a/models/migrations/v1_23/v303.go +++ b/models/migrations/v1_23/v303.go @@ -4,6 +4,8 @@ package v1_23 //nolint import ( + "fmt" + "code.gitea.io/gitea/models/migrations/base" "xorm.io/xorm" @@ -13,20 +15,26 @@ func GiteaLastDrop(x *xorm.Engine) error { sess := x.NewSession() defer sess.Close() - if err := base.DropTableColumns(sess, "badge", "slug"); err != nil { - return err - } - if err := base.DropTableColumns(sess, "oauth2_application", "skip_secondary_authorization"); err != nil { - return err - } - if err := base.DropTableColumns(sess, "repository", "default_wiki_branch"); err != nil { - return err - } - // the migration v297.go that adds everyone_access_mode exists in Gitea >= v1.22 and the column must be dropped - // but it does not exist in Forgejo and a failure to drop the column can be ignored - base.DropTableColumns(sess, "repo_unit", "everyone_access_mode") - if err := base.DropTableColumns(sess, "protected_branch", "can_force_push", "enable_force_push_allowlist", "force_push_allowlist_user_i_ds", "force_push_allowlist_team_i_ds", "force_push_allowlist_deploy_keys"); err != nil { - return err + for _, drop := range []struct { + table string + field string + }{ + {"badge", "slug"}, + {"oauth2_application", "skip_secondary_authorization"}, + {"repository", "default_wiki_branch"}, + {"repo_unit", "everyone_access_mode"}, + {"protected_branch", "can_force_push"}, + {"protected_branch", "enable_force_push_allowlist"}, + {"protected_branch", "force_push_allowlist_user_i_ds"}, + {"protected_branch", "force_push_allowlist_team_i_ds"}, + {"protected_branch", "force_push_allowlist_deploy_keys"}, + } { + if _, err := sess.Exec(fmt.Sprintf("SELECT `%s` FROM `%s` WHERE 0 = 1", drop.field, drop.table)); err != nil { + continue + } + if err := base.DropTableColumns(sess, drop.table, drop.field); err != nil { + return err + } } return sess.Commit()