[BugFix] Fix comment broken issue ref dependence (#12651)

* deleteIssuesByRepoID: delete related CommentTypeRemoveDependency & CommentTypeAddDependency comments too

* Ignore ErrIssueNotExist on comment.LoadDepIssueDetails()

* Add migration

* Ignore 'dependent_issue_id = 0' case

* exchange as per @lunny

Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
6543 2020-09-04 03:36:56 +02:00 committed by GitHub
parent 42a5e39b3b
commit 6c5266c9ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 2 deletions

View file

@ -1978,6 +1978,11 @@ func deleteIssuesByRepoID(sess Engine, repoID int64) (attachmentPaths []string,
return return
} }
if _, err = sess.In("dependent_issue_id", deleteCond).
Delete(&Comment{}); err != nil {
return
}
var attachments []*Attachment var attachments []*Attachment
if err = sess.In("issue_id", deleteCond). if err = sess.In("issue_id", deleteCond).
Find(&attachments); err != nil { Find(&attachments); err != nil {

View file

@ -228,6 +228,8 @@ var migrations = []Migration{
NewMigration("Add projects info to repository table", addProjectsInfo), NewMigration("Add projects info to repository table", addProjectsInfo),
// v147 -> v148 // v147 -> v148
NewMigration("create review for 0 review id code comments", createReviewsForCodeComments), NewMigration("create review for 0 review id code comments", createReviewsForCodeComments),
// v148 -> v149
NewMigration("remove issue dependency comments who refer to non existing issues", purgeInvalidDependenciesComments),
} }
// GetCurrentDBVersion returns the current db version // GetCurrentDBVersion returns the current db version

14
models/migrations/v148.go Normal file
View file

@ -0,0 +1,14 @@
// 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 (
"xorm.io/xorm"
)
func purgeInvalidDependenciesComments(x *xorm.Engine) error {
_, err := x.Exec("DELETE FROM comment WHERE dependent_issue_id != 0 AND dependent_issue_id NOT IN (SELECT id FROM issue)")
return err
}

View file

@ -1079,8 +1079,10 @@ func ViewIssue(ctx *context.Context) {
} }
} else if comment.Type == models.CommentTypeRemoveDependency || comment.Type == models.CommentTypeAddDependency { } else if comment.Type == models.CommentTypeRemoveDependency || comment.Type == models.CommentTypeAddDependency {
if err = comment.LoadDepIssueDetails(); err != nil { if err = comment.LoadDepIssueDetails(); err != nil {
ctx.ServerError("LoadDepIssueDetails", err) if !models.IsErrIssueNotExist(err) {
return ctx.ServerError("LoadDepIssueDetails", err)
return
}
} }
} else if comment.Type == models.CommentTypeCode || comment.Type == models.CommentTypeReview { } else if comment.Type == models.CommentTypeCode || comment.Type == models.CommentTypeReview {
comment.RenderedContent = string(markdown.Render([]byte(comment.Content), ctx.Repo.RepoLink, comment.RenderedContent = string(markdown.Render([]byte(comment.Content), ctx.Repo.RepoLink,