mirror of https://github.com/go-gitea/gitea.git
* Doctor: find IssueLabels without existing label * Repo Delete: delete labels & issue_labels too
This commit is contained in:
parent
909f2be99d
commit
70e4134130
|
@ -606,6 +606,22 @@ func runDoctorCheckDBConsistency(ctx *cli.Context) ([]string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find IssueLabels without existing label
|
||||||
|
count, err = models.CountOrphanedIssueLabels()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if count > 0 {
|
||||||
|
if ctx.Bool("fix") {
|
||||||
|
if err = models.DeleteOrphanedIssueLabels(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
results = append(results, fmt.Sprintf("%d issue_labels without existing label deleted", count))
|
||||||
|
} else {
|
||||||
|
results = append(results, fmt.Sprintf("%d issue_labels without existing label", count))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//find issues without existing repository
|
//find issues without existing repository
|
||||||
count, err = models.CountOrphanedIssues()
|
count, err = models.CountOrphanedIssues()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -224,6 +224,24 @@ func DeleteOrphanedLabels() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CountOrphanedIssueLabels return count of IssueLabels witch have no label behind anymore
|
||||||
|
func CountOrphanedIssueLabels() (int64, error) {
|
||||||
|
return x.Table("issue_label").
|
||||||
|
Join("LEFT", "label", "issue_label.label_id = label.id").
|
||||||
|
Where(builder.IsNull{"label.id"}).Count()
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteOrphanedIssueLabels delete IssueLabels witch have no label behind anymore
|
||||||
|
func DeleteOrphanedIssueLabels() error {
|
||||||
|
|
||||||
|
_, err := x.In("id", builder.Select("issue_label.id").From("issue_label").
|
||||||
|
Join("LEFT", "label", "issue_label.label_id = label.id").
|
||||||
|
Where(builder.IsNull{"label.id"})).
|
||||||
|
Delete(IssueLabel{})
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// CountOrphanedIssues count issues without a repo
|
// CountOrphanedIssues count issues without a repo
|
||||||
func CountOrphanedIssues() (int64, error) {
|
func CountOrphanedIssues() (int64, error) {
|
||||||
return x.Table("issue").
|
return x.Table("issue").
|
||||||
|
|
|
@ -764,3 +764,15 @@ func DeleteIssueLabel(issue *Issue, label *Label, doer *User) (err error) {
|
||||||
|
|
||||||
return sess.Commit()
|
return sess.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func deleteLabelsByRepoID(sess Engine, repoID int64) error {
|
||||||
|
deleteCond := builder.Select("id").From("label").Where(builder.Eq{"label.repo_id": repoID})
|
||||||
|
|
||||||
|
if _, err := sess.In("label_id", deleteCond).
|
||||||
|
Delete(&IssueLabel{}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := sess.Delete(&Label{RepoID: repoID})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
@ -1729,6 +1729,10 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
|
||||||
return fmt.Errorf("deleteBeans: %v", err)
|
return fmt.Errorf("deleteBeans: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := deleteLabelsByRepoID(sess, repoID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Delete Issues and related objects
|
// Delete Issues and related objects
|
||||||
var attachmentPaths []string
|
var attachmentPaths []string
|
||||||
if attachmentPaths, err = deleteIssuesByRepoID(sess, repoID); err != nil {
|
if attachmentPaths, err = deleteIssuesByRepoID(sess, repoID); err != nil {
|
||||||
|
|
Loading…
Reference in New Issue