Add migration to set IsArchived false if it is null (#11853)
* Add migration to set IsArchived false if it is null Fix #11824 Signed-off-by: Andrew Thornton <art27@cantab.net> * Add doctor Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		
							parent
							
								
									b682a2c1b2
								
							
						
					
					
						commit
						b9e281265e
					
				
					 4 changed files with 55 additions and 1 deletions
				
			
		|  | @ -574,6 +574,22 @@ func runDoctorCheckDBConsistency(ctx *cli.Context) ([]string, error) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	count, err = models.CountNullArchivedRepository() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	if count > 0 { | ||||||
|  | 		if ctx.Bool("fix") { | ||||||
|  | 			updatedCount, err := models.FixNullArchivedRepository() | ||||||
|  | 			if err != nil { | ||||||
|  | 				return nil, err | ||||||
|  | 			} | ||||||
|  | 			results = append(results, fmt.Sprintf("%d repositories with null is_archived updated", updatedCount)) | ||||||
|  | 		} else { | ||||||
|  | 			results = append(results, fmt.Sprintf("%d repositories with null is_archived", count)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	//ToDo: function to recalc all counters
 | 	//ToDo: function to recalc all counters
 | ||||||
| 
 | 
 | ||||||
| 	return results, nil | 	return results, nil | ||||||
|  |  | ||||||
|  | @ -283,3 +283,15 @@ func DeleteOrphanedObjects(subject, refobject, joinCond string) error { | ||||||
| 		Delete("`" + subject + "`") | 		Delete("`" + subject + "`") | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // CountNullArchivedRepository counts the number of repositories with is_archived is null
 | ||||||
|  | func CountNullArchivedRepository() (int64, error) { | ||||||
|  | 	return x.Where(builder.IsNull{"is_archived"}).Count(new(Repository)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // FixNullArchivedRepository sets is_archived to false where it is null
 | ||||||
|  | func FixNullArchivedRepository() (int64, error) { | ||||||
|  | 	return x.Where(builder.IsNull{"is_archived"}).Cols("is_archived").Update(&Repository{ | ||||||
|  | 		IsArchived: false, | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -214,8 +214,10 @@ var migrations = []Migration{ | ||||||
| 	NewMigration("prepend refs/heads/ to issue refs", prependRefsHeadsToIssueRefs), | 	NewMigration("prepend refs/heads/ to issue refs", prependRefsHeadsToIssueRefs), | ||||||
| 	// v140 -> v141
 | 	// v140 -> v141
 | ||||||
| 	NewMigration("Save detected language file size to database instead of percent", fixLanguageStatsToSaveSize), | 	NewMigration("Save detected language file size to database instead of percent", fixLanguageStatsToSaveSize), | ||||||
| 	// v141 -> 142
 | 	// v141 -> v142
 | ||||||
| 	NewMigration("Add KeepActivityPrivate to User table", addKeepActivityPrivateUserColumn), | 	NewMigration("Add KeepActivityPrivate to User table", addKeepActivityPrivateUserColumn), | ||||||
|  | 	// v142 -> v143
 | ||||||
|  | 	NewMigration("Ensure Repository.IsArchived is not null", setIsArchivedToFalse), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // GetCurrentDBVersion returns the current db version
 | // GetCurrentDBVersion returns the current db version
 | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								models/migrations/v142.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								models/migrations/v142.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | // Copyright 2020 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 ( | ||||||
|  | 	"code.gitea.io/gitea/modules/log" | ||||||
|  | 	"xorm.io/builder" | ||||||
|  | 	"xorm.io/xorm" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func setIsArchivedToFalse(x *xorm.Engine) error { | ||||||
|  | 	type Repository struct { | ||||||
|  | 		IsArchived bool `xorm:"INDEX"` | ||||||
|  | 	} | ||||||
|  | 	count, err := x.Where(builder.IsNull{"is_archived"}).Cols("is_archived").Update(&Repository{ | ||||||
|  | 		IsArchived: false, | ||||||
|  | 	}) | ||||||
|  | 	if err == nil { | ||||||
|  | 		log.Debug("Updated %d repositories with is_archived IS NULL", count) | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue