From c632e48dc1ebf6271e16a57b717c1f5916118745 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Thu, 14 Feb 2019 10:42:54 +0100 Subject: [PATCH] add migration --- models/migrations/migrations.go | 2 ++ models/migrations/v80.go | 1 - models/migrations/v87.go | 43 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 models/migrations/v87.go diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index f3a090e41c17..2d395d09bf3c 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -227,6 +227,8 @@ var migrations = []Migration{ NewMigration("hash application token", hashAppToken), // v86 -> v87 NewMigration("add http method to webhook", addHTTPMethodToWebhook), + // v87 -> v88 + NewMigration("delete orphaned attachments", deleteOrphanedAttachments), } // Migrate database to current version diff --git a/models/migrations/v80.go b/models/migrations/v80.go index 8cd2ac80a8c4..d9040da6018a 100644 --- a/models/migrations/v80.go +++ b/models/migrations/v80.go @@ -14,5 +14,4 @@ func addIsLockedToIssues(x *xorm.Engine) error { } return x.Sync2(new(Issue)) - } diff --git a/models/migrations/v87.go b/models/migrations/v87.go new file mode 100644 index 000000000000..42c935d53b9f --- /dev/null +++ b/models/migrations/v87.go @@ -0,0 +1,43 @@ +package models + +import ( + "os" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/setting" + "github.com/go-xorm/xorm" +) + +func deleteOrphanedAttachments(x *xorm.Engine) error { + + type Attachment struct { + ID int64 `xorm:"pk autoincr"` + UUID string `xorm:"uuid UNIQUE"` + IssueID int64 `xorm:"INDEX"` + ReleaseID int64 `xorm:"INDEX"` + CommentID int64 + } + + sess := x.NewSession() + defer sess.Close() + + err := sess.BufferSize(setting.IterateBufferSize). + Where("comment_id = ? AND release_id = ?", 0, 0).Cols("uuid"). + Iterate(new(Attachment), + func(idx int, bean interface{}) error { + attachment := bean.(*Attachment) + + if err := os.RemoveAll(models.AttachmentLocalPath(attachment.UUID)); err != nil { + return err + } + + _, err := sess.Delete(attachment) + return err + }) + + if err != nil { + return err + } + + return sess.Commit() +}