forked from NYANDEV/forgejo
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
65dceb6a40
commit
abb534ba7a
1 changed files with 32 additions and 17 deletions
|
@ -26,23 +26,38 @@ func deleteOrphanedAttachments(x *xorm.Engine) error {
|
||||||
sess := x.NewSession()
|
sess := x.NewSession()
|
||||||
defer sess.Close()
|
defer sess.Close()
|
||||||
|
|
||||||
err := sess.BufferSize(setting.Database.IterateBufferSize).
|
var limit = setting.Database.IterateBufferSize
|
||||||
Where("`issue_id` = 0 and (`release_id` = 0 or `release_id` not in (select `id` from `release`))").Cols("uuid").
|
if limit <= 0 {
|
||||||
Iterate(new(Attachment),
|
limit = 50
|
||||||
func(idx int, bean interface{}) error {
|
|
||||||
attachment := bean.(*Attachment)
|
|
||||||
|
|
||||||
if err := os.RemoveAll(models.AttachmentLocalPath(attachment.UUID)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := sess.ID(attachment.ID).NoAutoCondition().Delete(attachment)
|
|
||||||
return err
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return sess.Commit()
|
for {
|
||||||
|
attachements := make([]Attachment, 0, limit)
|
||||||
|
if err := sess.Where("`issue_id` = 0 and (`release_id` = 0 or `release_id` not in (select `id` from `release`))").
|
||||||
|
Cols("id, uuid").Limit(limit).
|
||||||
|
Asc("id").
|
||||||
|
Find(&attachements); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(attachements) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var ids = make([]int64, 0, limit)
|
||||||
|
for _, attachment := range attachements {
|
||||||
|
ids = append(ids, attachment.ID)
|
||||||
|
}
|
||||||
|
if _, err := sess.In("id", ids).Delete(new(Attachment)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, attachment := range attachements {
|
||||||
|
if err := os.RemoveAll(models.AttachmentLocalPath(attachment.UUID)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(attachements) < limit {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue