Remove release attachments which repository has been deleted (#9334)
This commit is contained in:
		
							parent
							
								
									f46176a418
								
							
						
					
					
						commit
						bfcce5f86c
					
				
					 2 changed files with 43 additions and 0 deletions
				
			
		|  | @ -278,6 +278,8 @@ var migrations = []Migration{ | |||
| 	NewMigration("change review content type to text", changeReviewContentToText), | ||||
| 	// v111 -> v112
 | ||||
| 	NewMigration("update branch protection for can push and whitelist enable", addBranchProtectionCanPushAndEnableWhitelist), | ||||
| 	// v112 -> v113
 | ||||
| 	NewMigration("remove release attachments which repository deleted", removeAttachmentMissedRepo), | ||||
| } | ||||
| 
 | ||||
| // Migrate database to current version
 | ||||
|  |  | |||
							
								
								
									
										41
									
								
								models/migrations/v112.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								models/migrations/v112.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| // 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`"))). | ||||
| 			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 NOT IN (SELECT id FROM `release`)") | ||||
| 	return err | ||||
| } | ||||
		Loading…
	
		Reference in a new issue