From 4ac09230fc2af27df6a10451c4f4489a9acdcacf Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Tue, 12 Feb 2019 13:25:30 +0100 Subject: [PATCH 01/10] delete attachments from the database and file system --- models/release.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/models/release.go b/models/release.go index b7ec4461f274..ec431dfc310b 100644 --- a/models/release.go +++ b/models/release.go @@ -6,6 +6,7 @@ package models import ( "fmt" + "os" "sort" "strings" @@ -469,6 +470,24 @@ func DeleteReleaseByID(id int64, u *User, delTag bool) error { go HookQueue.Add(rel.Repo.ID) } + if setting.AttachmentEnabled { + + uuids := make([]string, 0, len(rel.Attachments)) + + for i := range rel.Attachments { + attachment := rel.Attachments[i] + if err := os.RemoveAll(attachment.LocalPath()); err != nil { + return err + } + + uuids = append(uuids, attachment.UUID) + } + + if _, err := x.In("uuid", uuids).Delete(new(Attachment)); err != nil { + return err + } + } + return nil } From c632e48dc1ebf6271e16a57b717c1f5916118745 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Thu, 14 Feb 2019 10:42:54 +0100 Subject: [PATCH 02/10] 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() +} From 7b3510ffa0d1c12a59238023b9876d0088a24f5d Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Tue, 14 May 2019 13:31:19 +0100 Subject: [PATCH 03/10] fix import statements --- models/migrations/v87.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/migrations/v87.go b/models/migrations/v87.go index 42c935d53b9f..0371dafb5d74 100644 --- a/models/migrations/v87.go +++ b/models/migrations/v87.go @@ -5,6 +5,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/setting" + "github.com/go-xorm/xorm" ) From 7b8c81634fc50ae44effa0779c85e348ba5c299a Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Tue, 14 May 2019 13:52:35 +0100 Subject: [PATCH 04/10] fix package name --- models/migrations/v87.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v87.go b/models/migrations/v87.go index 0371dafb5d74..5fdedf2e9b94 100644 --- a/models/migrations/v87.go +++ b/models/migrations/v87.go @@ -1,4 +1,4 @@ -package models +package migrations import ( "os" From c1908f4c33f215a238ee02acfbc737f357139c5d Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Wed, 18 Sep 2019 00:22:30 +0100 Subject: [PATCH 05/10] remove conditional should in case the confi has been changed and the server restarted --- models/release.go | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/models/release.go b/models/release.go index 792086eae57e..5d1a2444dd1a 100644 --- a/models/release.go +++ b/models/release.go @@ -370,22 +370,19 @@ func DeleteReleaseByID(id int64, doer *User, delTag bool) error { go HookQueue.Add(rel.Repo.ID) } - if setting.AttachmentEnabled { + uuids := make([]string, 0, len(rel.Attachments)) - uuids := make([]string, 0, len(rel.Attachments)) - - for i := range rel.Attachments { - attachment := rel.Attachments[i] - if err := os.RemoveAll(attachment.LocalPath()); err != nil { - return err - } - - uuids = append(uuids, attachment.UUID) - } - - if _, err := x.In("uuid", uuids).Delete(new(Attachment)); err != nil { + for i := range rel.Attachments { + attachment := rel.Attachments[i] + if err := os.RemoveAll(attachment.LocalPath()); err != nil { return err } + + uuids = append(uuids, attachment.UUID) + } + + if _, err := x.In("uuid", uuids).Delete(new(Attachment)); err != nil { + return err } return nil From 7832a9ada0e5b4e49ba302db667d3164df35c99a Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Wed, 18 Sep 2019 12:24:53 +0100 Subject: [PATCH 06/10] simplify deletion of attachments in DB --- models/release.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/models/release.go b/models/release.go index 5d1a2444dd1a..4fd3975b4736 100644 --- a/models/release.go +++ b/models/release.go @@ -381,11 +381,8 @@ func DeleteReleaseByID(id int64, doer *User, delTag bool) error { uuids = append(uuids, attachment.UUID) } - if _, err := x.In("uuid", uuids).Delete(new(Attachment)); err != nil { - return err - } - - return nil + _, err := x.Delete(&Attachment{ReleaseID: id}) + return err } // SyncReleasesWithTags synchronizes release table with repository tags From 9355bbc6fff61670d76fbf18019d592d45e35fc0 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Wed, 18 Sep 2019 12:30:51 +0100 Subject: [PATCH 07/10] fix CI build --- models/migrations/v95.go | 5 +++-- models/release.go | 25 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/models/migrations/v95.go b/models/migrations/v95.go index 4ef7fbeb4067..5812f6a833ef 100644 --- a/models/migrations/v95.go +++ b/models/migrations/v95.go @@ -9,6 +9,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/setting" + "github.com/go-xorm/xorm" ) @@ -25,8 +26,8 @@ func deleteOrphanedAttachments(x *xorm.Engine) error { sess := x.NewSession() defer sess.Close() - err := sess.BufferSize(setting.IterateBufferSize). - Where("`comment_id` = 0 and (`release_id` = 0 or `release_id` not in (select `id` from `releases`))").Cols("uuid"). + err := sess.BufferSize(setting.Database.IterateBufferSize). + Where("`comment_id` = 0 and (`release_id` = 0 or `release_id` not in (select `id` from `release`))").Cols("uuid"). Iterate(new(Attachment), func(idx int, bean interface{}) error { attachment := bean.(*Attachment) diff --git a/models/release.go b/models/release.go index 4fd3975b4736..31c54ea4aab2 100644 --- a/models/release.go +++ b/models/release.go @@ -358,6 +358,17 @@ func DeleteReleaseByID(id int64, doer *User, delTag bool) error { return fmt.Errorf("LoadAttributes: %v", err) } + if _, err := x.Delete(&Attachment{ReleaseID: id}); err != nil { + return err + } + + for i := range rel.Attachments { + attachment := rel.Attachments[i] + if err := os.RemoveAll(attachment.LocalPath()); err != nil { + return err + } + } + mode, _ := AccessLevel(doer, rel.Repo) if err := PrepareWebhooks(rel.Repo, HookEventRelease, &api.ReleasePayload{ Action: api.HookReleaseDeleted, @@ -370,19 +381,7 @@ func DeleteReleaseByID(id int64, doer *User, delTag bool) error { go HookQueue.Add(rel.Repo.ID) } - uuids := make([]string, 0, len(rel.Attachments)) - - for i := range rel.Attachments { - attachment := rel.Attachments[i] - if err := os.RemoveAll(attachment.LocalPath()); err != nil { - return err - } - - uuids = append(uuids, attachment.UUID) - } - - _, err := x.Delete(&Attachment{ReleaseID: id}) - return err + return nil } // SyncReleasesWithTags synchronizes release table with repository tags From 7063bf36410c0134f15b9d44f7165e91f79b53c9 Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Fri, 20 Sep 2019 08:40:12 +0100 Subject: [PATCH 08/10] fix review --- models/migrations/migrations.go | 4 ++-- models/migrations/v94.go | 4 +--- models/release.go | 4 ++++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 8d94f81974a1..f45cfba29e13 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -243,9 +243,9 @@ var migrations = []Migration{ // v93 -> v94 NewMigration("add email notification enabled preference to user", addEmailNotificationEnabledToUser), // v94 -> v95 - NewMigration("delete orphaned attachments", deleteOrphanedAttachments), - // v95 -> v96 NewMigration("add enable_status_check, status_check_contexts to protected_branch", addStatusCheckColumnsForProtectedBranches), + // v95 -> v96 + NewMigration("delete orphaned attachments", deleteOrphanedAttachments), } // Migrate database to current version diff --git a/models/migrations/v94.go b/models/migrations/v94.go index 088a906a0e8e..5fe8c3fa12d2 100644 --- a/models/migrations/v94.go +++ b/models/migrations/v94.go @@ -4,9 +4,7 @@ package migrations -import ( - "github.com/go-xorm/xorm" -) +import "github.com/go-xorm/xorm" func addStatusCheckColumnsForProtectedBranches(x *xorm.Engine) error { type ProtectedBranch struct { diff --git a/models/release.go b/models/release.go index 31c54ea4aab2..b81181f364f8 100644 --- a/models/release.go +++ b/models/release.go @@ -2,6 +2,10 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + package models import ( From c59b9d6344a1111fafa0c92c1a80ef8196d1e8ba Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Fri, 20 Sep 2019 15:14:58 +0100 Subject: [PATCH 09/10] add copyright in the proper place --- models/release.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/models/release.go b/models/release.go index 62bcdf8afc9b..85a758becfc8 100644 --- a/models/release.go +++ b/models/release.go @@ -1,7 +1,4 @@ // Copyright 2014 The Gogs Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - // Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. From e094f75d64bfcddca48c9ce2d529dbca7f88b20d Mon Sep 17 00:00:00 2001 From: Lanre Adelowo Date: Fri, 20 Sep 2019 16:50:17 +0100 Subject: [PATCH 10/10] fix review --- models/migrations/v96.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/migrations/v96.go b/models/migrations/v96.go index 5812f6a833ef..5c2135ffc6ad 100644 --- a/models/migrations/v96.go +++ b/models/migrations/v96.go @@ -36,7 +36,7 @@ func deleteOrphanedAttachments(x *xorm.Engine) error { return err } - _, err := sess.Delete(attachment) + _, err := sess.ID(attachment.ID).NoAutoCondition().Delete(attachment) return err })