- // 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 (
- "fmt"
- "path/filepath"
-
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/util"
-
- "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++ {
- uuid := attachments[i].UUID
- if err = util.RemoveAll(filepath.Join(setting.Attachment.Path, uuid[0:1], uuid[1:2], uuid)); err != nil {
- fmt.Printf("Error: %v", err)
- }
- }
-
- 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
- }
|