summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/doctor.go16
-rw-r--r--models/consistency.go12
-rw-r--r--models/migrations/migrations.go4
-rw-r--r--models/migrations/v142.go24
4 files changed, 55 insertions, 1 deletions
diff --git a/cmd/doctor.go b/cmd/doctor.go
index 3456f26f70..45a50c8266 100644
--- a/cmd/doctor.go
+++ b/cmd/doctor.go
@@ -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
return results, nil
diff --git a/models/consistency.go b/models/consistency.go
index d6a158840b..fbb99ca80c 100644
--- a/models/consistency.go
+++ b/models/consistency.go
@@ -283,3 +283,15 @@ func DeleteOrphanedObjects(subject, refobject, joinCond string) error {
Delete("`" + subject + "`")
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,
+ })
+}
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index 432bcffb1b..6cc80249a3 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -214,8 +214,10 @@ var migrations = []Migration{
NewMigration("prepend refs/heads/ to issue refs", prependRefsHeadsToIssueRefs),
// v140 -> v141
NewMigration("Save detected language file size to database instead of percent", fixLanguageStatsToSaveSize),
- // v141 -> 142
+ // v141 -> v142
NewMigration("Add KeepActivityPrivate to User table", addKeepActivityPrivateUserColumn),
+ // v142 -> v143
+ NewMigration("Ensure Repository.IsArchived is not null", setIsArchivedToFalse),
}
// GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v142.go b/models/migrations/v142.go
new file mode 100644
index 0000000000..1abdd34961
--- /dev/null
+++ b/models/migrations/v142.go
@@ -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
+}