code.gitea.io/gitea@v1.21.7/models/migrations/v1_11/v112.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_11 //nolint 5 6 import ( 7 "fmt" 8 "path/filepath" 9 10 "code.gitea.io/gitea/modules/setting" 11 "code.gitea.io/gitea/modules/util" 12 13 "xorm.io/builder" 14 "xorm.io/xorm" 15 ) 16 17 func RemoveAttachmentMissedRepo(x *xorm.Engine) error { 18 type Attachment struct { 19 UUID string `xorm:"uuid"` 20 } 21 var start int 22 attachments := make([]*Attachment, 0, 50) 23 for { 24 err := x.Select("uuid").Where(builder.NotIn("release_id", builder.Select("id").From("`release`"))). 25 And("release_id > 0"). 26 OrderBy("id").Limit(50, start).Find(&attachments) 27 if err != nil { 28 return err 29 } 30 31 for i := 0; i < len(attachments); i++ { 32 uuid := attachments[i].UUID 33 if err = util.RemoveAll(filepath.Join(setting.Attachment.Storage.Path, uuid[0:1], uuid[1:2], uuid)); err != nil { 34 fmt.Printf("Error: %v", err) //nolint:forbidigo 35 } 36 } 37 38 if len(attachments) < 50 { 39 break 40 } 41 start += 50 42 attachments = attachments[:0] 43 } 44 45 _, err := x.Exec("DELETE FROM attachment WHERE release_id > 0 AND release_id NOT IN (SELECT id FROM `release`)") 46 return err 47 }