Browse Source

[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>
tags/v1.13.0-rc1
6543 GitHub 5 years ago
parent
commit
5a3a03762c
4 changed files with 25 additions and 2 deletions
  1. +5
    -0
      models/issue.go
  2. +2
    -0
      models/migrations/migrations.go
  3. +14
    -0
      models/migrations/v148.go
  4. +4
    -2
      routers/repo/issue.go

+ 5
- 0
models/issue.go View File

@@ -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 {


+ 2
- 0
models/migrations/migrations.go View File

@@ -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


+ 14
- 0
models/migrations/v148.go 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
}

+ 4
- 2
routers/repo/issue.go View File

@@ -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,


Loading…
Cancel
Save