}
}
}
+
+// CountOrphanedAttachments returns the number of bad attachments
+func CountOrphanedAttachments() (int64, error) {
+ return x.Where("(issue_id > 0 and issue_id not in (select id from issue)) or (release_id > 0 and release_id not in (select id from `release`))").
+ Count(new(Attachment))
+}
+
+// DeleteOrphanedAttachments delete all bad attachments
+func DeleteOrphanedAttachments() error {
+ _, err := x.Where("(issue_id > 0 and issue_id not in (select id from issue)) or (release_id > 0 and release_id not in (select id from `release`))").
+ Delete(new(Attachment))
+ return err
+}
}
}
+ // find releases without existing repository
+ count, err = models.CountOrphanedObjects("release", "repository", "release.repo_id=repository.id")
+ if err != nil {
+ logger.Critical("Error: %v whilst counting orphaned objects", err)
+ return err
+ }
+ if count > 0 {
+ if autofix {
+ if err = models.DeleteOrphanedObjects("release", "repository", "release.repo_id=repository.id"); err != nil {
+ logger.Critical("Error: %v whilst deleting orphaned objects", err)
+ return err
+ }
+ logger.Info("%d releases without existing repository deleted", count)
+ } else {
+ logger.Warn("%d releases without existing repository", count)
+ }
+ }
+
// find pulls without existing issues
count, err = models.CountOrphanedObjects("pull_request", "issue", "pull_request.issue_id=issue.id")
if err != nil {
}
}
+ // find attachments without existing issues or releases
+ count, err = models.CountOrphanedAttachments()
+ if err != nil {
+ logger.Critical("Error: %v whilst counting orphaned objects", err)
+ return err
+ }
+ if count > 0 {
+ if autofix {
+ if err = models.DeleteOrphanedAttachments(); err != nil {
+ logger.Critical("Error: %v whilst deleting orphaned objects", err)
+ return err
+ }
+ logger.Info("%d attachments without existing issue or release deleted", count)
+ } else {
+ logger.Warn("%d attachments without existing issue or release", count)
+ }
+ }
+
// find null archived repositories
count, err = models.CountNullArchivedRepository()
if err != nil {