aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEarl Warren <109468362+earl-warren@users.noreply.github.com>2023-12-18 16:32:08 +0100
committerGitHub <noreply@github.com>2023-12-18 15:32:08 +0000
commite02095c5b6e04f70ae6562f5aee169f7ee93cf7a (patch)
tree237b7683a28259a3293720e7fb653e0cdf728be2
parentbf8b082c40f2aee7d3fbd3c68d73886e13381712 (diff)
downloadgitea-e02095c5b6e04f70ae6562f5aee169f7ee93cf7a.tar.gz
gitea-e02095c5b6e04f70ae6562f5aee169f7ee93cf7a.zip
Add orphaned topic consistency check (#28507)
- If a topic has zero repository count, it means that none of the repositories are using that topic, that would make them 'useless' to keep. One caveat is that if that topic is going to be used in the future, it will be added again to the database, but simply with a new ID. Refs: https://codeberg.org/forgejo/forgejo/pulls/1964 Co-authored-by: Gusted <postmaster@gusted.xyz>
-rw-r--r--models/repo/topic.go10
-rw-r--r--modules/doctor/dbconsistency.go6
2 files changed, 16 insertions, 0 deletions
diff --git a/models/repo/topic.go b/models/repo/topic.go
index ca533fc1e0..b71f43bc88 100644
--- a/models/repo/topic.go
+++ b/models/repo/topic.go
@@ -377,3 +377,13 @@ func syncTopicsInRepository(sess db.Engine, repoID int64) error {
}
return nil
}
+
+// CountOrphanedAttachments returns the number of topics that don't belong to any repository.
+func CountOrphanedTopics(ctx context.Context) (int64, error) {
+ return db.GetEngine(ctx).Where("repo_count = 0").Count(new(Topic))
+}
+
+// DeleteOrphanedAttachments delete all topics that don't belong to any repository.
+func DeleteOrphanedTopics(ctx context.Context) (int64, error) {
+ return db.GetEngine(ctx).Where("repo_count = 0").Delete(new(Topic))
+}
diff --git a/modules/doctor/dbconsistency.go b/modules/doctor/dbconsistency.go
index ac983f9161..e2dcb63f33 100644
--- a/modules/doctor/dbconsistency.go
+++ b/modules/doctor/dbconsistency.go
@@ -158,6 +158,12 @@ func checkDBConsistency(ctx context.Context, logger log.Logger, autofix bool) er
Fixer: actions_model.FixRunnersWithoutBelongingOwner,
FixedMessage: "Removed",
},
+ {
+ Name: "Topics with empty repository count",
+ Counter: repo_model.CountOrphanedTopics,
+ Fixer: repo_model.DeleteOrphanedTopics,
+ FixedMessage: "Removed",
+ },
}
// TODO: function to recalc all counters