mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Remove release attachments which repository has been deleted (#9334)
This commit is contained in:
		
				
					committed by
					
						 techknowlogick
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							f46176a418
						
					
				
				
					commit
					bfcce5f86c
				
			| @@ -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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user