Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions models/migrations/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion models/migrations/v80.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,4 @@ func addIsLockedToIssues(x *xorm.Engine) error {
}

return x.Sync2(new(Issue))

}
44 changes: 44 additions & 0 deletions models/migrations/v87.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
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()
}
19 changes: 19 additions & 0 deletions models/release.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package models

import (
"fmt"
"os"
"sort"
"strings"

Expand Down Expand Up @@ -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
}

Expand Down