From 2256fa7e9ce2c7eff045d50b68b3ef79c0a19359 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 14 Jul 2025 16:54:06 -0700 Subject: [PATCH] Fix bug --- models/issues/issue.go | 4 ++-- services/issue/issue.go | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/models/issues/issue.go b/models/issues/issue.go index a86d50ca9da..238f4bf5cb1 100644 --- a/models/issues/issue.go +++ b/models/issues/issue.go @@ -223,7 +223,7 @@ func (issue *Issue) LoadPullRequest(ctx context.Context) (err error) { return nil } -func (issue *Issue) loadComments(ctx context.Context) (err error) { +func (issue *Issue) LoadComments(ctx context.Context) (err error) { return issue.loadCommentsByType(ctx, CommentTypeUndefined) } @@ -344,7 +344,7 @@ func (issue *Issue) LoadAttributes(ctx context.Context) (err error) { return err } - if err = issue.loadComments(ctx); err != nil { + if err = issue.LoadComments(ctx); err != nil { return err } diff --git a/services/issue/issue.go b/services/issue/issue.go index 9114cd27d33..e40f6453ad6 100644 --- a/services/issue/issue.go +++ b/services/issue/issue.go @@ -301,12 +301,14 @@ func deleteIssue(ctx context.Context, issue *issues_model.Issue) ([]string, erro attachmentPaths = append(attachmentPaths, issue.Attachments[i].RelativePath()) } - // TODO: deference all review comments + // deference all review comments + if err := issue.LoadComments(ctx); err != nil { + return nil, err + } // delete all database data still assigned to this issue if err := db.DeleteBeans(ctx, &issues_model.ContentHistory{IssueID: issue.ID}, - &issues_model.Comment{IssueID: issue.ID}, &issues_model.IssueLabel{IssueID: issue.ID}, &issues_model.IssueDependency{IssueID: issue.ID}, &issues_model.IssueAssignees{IssueID: issue.ID}, @@ -327,6 +329,41 @@ func deleteIssue(ctx context.Context, issue *issues_model.Issue) ([]string, erro return nil, err } + for _, comment := range issue.Comments { + if err := issues_model.DeleteComment(ctx, comment); err != nil { + return nil, err + } + + if comment.ReviewID > 0 { + if err := comment.LoadIssue(ctx); err != nil { + return nil, err + } + if err := comment.Issue.LoadRepo(ctx); err != nil { + return nil, err + } + if err := comment.Issue.LoadPullRequest(ctx); err != nil { + return nil, err + } + if err := git.RemoveRef(ctx, comment.Issue.Repo.RepoPath(), issues_model.GetCodeCommentRef(comment.Issue.PullRequest.Index, comment.ID)); err != nil { + log.Error("Unable to remove ref in base repository for PR[%d] Error: %v", comment.Issue.PullRequest.ID, err) + // We should not return error here, because the comment has been removed from database. + // users have to delete this ref manually or we should have a synchronize between + // database comment table and git refs. + } + } + + // delete all attachments related to this comment + for _, attachment := range comment.Attachments { + if err := storage.Attachments.Delete(repo_model.AttachmentRelativePath(attachment.UUID)); err != nil { + // Even delete files failed, but the attachments has been removed from database, so we + // should not return error but only record the error on logs. + // users have to delete this attachments manually or we should have a + // synchronize between database attachment table and attachment storage + log.Error("delete attachment[uuid: %s] failed: %v", attachment.UUID, err) + } + } + } + if err := committer.Commit(); err != nil { return nil, err }