// 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 migrations import ( "os" "code.gitea.io/gitea/models" "xorm.io/builder" "xorm.io/xorm" ) func removeAttachmentMissedRepo(x *xorm.Engine) error { type Attachment struct { UUID string `xorm:"uuid"` } var start int attachments := make([]*Attachment, 0, 50) for { err := x.Select("uuid").Where(builder.NotIn("release_id", builder.Select("id").From("`release`"))). And("release_id > 0"). OrderBy("id").Limit(50, start).Find(&attachments) if err != nil { return err } for i := 0; i < len(attachments); i++ { os.RemoveAll(models.AttachmentLocalPath(attachments[i].UUID)) } if len(attachments) < 50 { break } start += 50 attachments = attachments[:0] } _, err := x.Exec("DELETE FROM attachment WHERE release_id > 0 AND release_id NOT IN (SELECT id FROM `release`)") return err }