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:
zeripath 2020-06-11 21:18:11 +01:00 committed by GitHub
parent b682a2c1b2
commit b9e281265e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 1 deletions

View file

@ -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

View file

@ -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,
})
}

View file

@ -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
View 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
}