diff options
author | 6543 <6543@obermui.de> | 2020-09-04 03:36:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-04 09:36:56 +0800 |
commit | 6c5266c9cadf500ec8a166066bf4452801cc2545 (patch) | |
tree | 5f32a7e3a8438e07ea013f8a2db0069460795dc9 | |
parent | 42a5e39b3bb17cf006a5d04887148a5ea9719f32 (diff) | |
download | gitea-6c5266c9cadf500ec8a166066bf4452801cc2545.tar.gz gitea-6c5266c9cadf500ec8a166066bf4452801cc2545.zip |
[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>
-rw-r--r-- | models/issue.go | 5 | ||||
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v148.go | 14 | ||||
-rw-r--r-- | routers/repo/issue.go | 6 |
4 files changed, 25 insertions, 2 deletions
diff --git a/models/issue.go b/models/issue.go index 2912f7e8ef..81652771ba 100644 --- a/models/issue.go +++ b/models/issue.go @@ -1978,6 +1978,11 @@ func deleteIssuesByRepoID(sess Engine, repoID int64) (attachmentPaths []string, return } + if _, err = sess.In("dependent_issue_id", deleteCond). + Delete(&Comment{}); err != nil { + return + } + var attachments []*Attachment if err = sess.In("issue_id", deleteCond). Find(&attachments); err != nil { diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go index 721b045fdc..6d27934f6d 100644 --- a/models/migrations/migrations.go +++ b/models/migrations/migrations.go @@ -228,6 +228,8 @@ var migrations = []Migration{ NewMigration("Add projects info to repository table", addProjectsInfo), // v147 -> v148 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 diff --git a/models/migrations/v148.go b/models/migrations/v148.go new file mode 100644 index 0000000000..35d17f5b2c --- /dev/null +++ b/models/migrations/v148.go @@ -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 +} diff --git a/routers/repo/issue.go b/routers/repo/issue.go index 4bbc355027..4c745ed5d7 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -1079,8 +1079,10 @@ func ViewIssue(ctx *context.Context) { } } else if comment.Type == models.CommentTypeRemoveDependency || comment.Type == models.CommentTypeAddDependency { if err = comment.LoadDepIssueDetails(); err != nil { - ctx.ServerError("LoadDepIssueDetails", err) - return + if !models.IsErrIssueNotExist(err) { + ctx.ServerError("LoadDepIssueDetails", err) + return + } } } else if comment.Type == models.CommentTypeCode || comment.Type == models.CommentTypeReview { comment.RenderedContent = string(markdown.Render([]byte(comment.Content), ctx.Repo.RepoLink, |