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  }