From 6d35e8f9e10fa7b819faf583f078c5388ccc987b Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 1 Dec 2021 09:32:00 +0800 Subject: [PATCH 1/4] Check if column exist before rename if exist, just return with no error --- models/migrations/v184.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/models/migrations/v184.go b/models/migrations/v184.go index b7be342b871c4..fa5700dba65d7 100644 --- a/models/migrations/v184.go +++ b/models/migrations/v184.go @@ -5,6 +5,7 @@ package migrations import ( + "context" "fmt" "code.gitea.io/gitea/modules/setting" @@ -29,6 +30,14 @@ func renameTaskErrorsToMessage(x *xorm.Engine) error { return fmt.Errorf("error on Sync2: %v", err) } + exist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "message") + if err != nil { + return err + } + if exist { + return nil + } + switch { case setting.Database.UseMySQL: if _, err := sess.Exec("ALTER TABLE `task` CHANGE errors message text"); err != nil { From 9cabe3f2c804ab32d2c98f3a05c97cad4ed79b82 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 1 Dec 2021 12:52:37 +0800 Subject: [PATCH 2/4] Also check if errors column exist --- models/migrations/v184.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/models/migrations/v184.go b/models/migrations/v184.go index fa5700dba65d7..39e2ab821b053 100644 --- a/models/migrations/v184.go +++ b/models/migrations/v184.go @@ -35,7 +35,18 @@ func renameTaskErrorsToMessage(x *xorm.Engine) error { return err } if exist { - return nil + errorsExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "errors") + if err != nil { + return err + } + if !errorsExist { + return nil + } + + // if both errors and message exist, drop message at first + if err := dropTableColumns(sess, "task", "message"); err != nil { + return err + } } switch { From 358e1bf8184c827318e15c5bad107438880844d4 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 1 Dec 2021 14:04:47 +0800 Subject: [PATCH 3/4] Add comment for migration --- models/migrations/v184.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/migrations/v184.go b/models/migrations/v184.go index 39e2ab821b053..67b3e605eb335 100644 --- a/models/migrations/v184.go +++ b/models/migrations/v184.go @@ -30,6 +30,7 @@ func renameTaskErrorsToMessage(x *xorm.Engine) error { return fmt.Errorf("error on Sync2: %v", err) } + // This migration maybe rerun so that we should check if it has been run exist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "message") if err != nil { return err From 9d5830b26550cb6c588ce0361f8ae6f71f25d4db Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 2 Dec 2021 19:56:58 +0800 Subject: [PATCH 4/4] Fix sqlite test --- models/migrations/v184.go | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/models/migrations/v184.go b/models/migrations/v184.go index 67b3e605eb335..97bc72d5d94a2 100644 --- a/models/migrations/v184.go +++ b/models/migrations/v184.go @@ -20,22 +20,13 @@ func renameTaskErrorsToMessage(x *xorm.Engine) error { Status int `xorm:"index"` } - sess := x.NewSession() - defer sess.Close() - if err := sess.Begin(); err != nil { - return err - } - - if err := sess.Sync2(new(Task)); err != nil { - return fmt.Errorf("error on Sync2: %v", err) - } - // This migration maybe rerun so that we should check if it has been run - exist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "message") + messageExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "message") if err != nil { return err } - if exist { + + if messageExist { errorsExist, err := x.Dialect().IsColumnExist(x.DB(), context.Background(), "task", "errors") if err != nil { return err @@ -43,7 +34,19 @@ func renameTaskErrorsToMessage(x *xorm.Engine) error { if !errorsExist { return nil } + } + + sess := x.NewSession() + defer sess.Close() + if err := sess.Begin(); err != nil { + return err + } + + if err := sess.Sync2(new(Task)); err != nil { + return fmt.Errorf("error on Sync2: %v", err) + } + if messageExist { // if both errors and message exist, drop message at first if err := dropTableColumns(sess, "task", "message"); err != nil { return err