From d779deef6ec95db35299096cc1170ada553b102c Mon Sep 17 00:00:00 2001 From: guillep2k <18600385+guillep2k@users.noreply.github.com> Date: Sun, 24 Nov 2019 02:46:16 -0300 Subject: [PATCH] Fix show single review comments in the PR page (#9143) --- models/review.go | 5 +++++ services/pull/review.go | 32 +++++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/models/review.go b/models/review.go index 0dc44a2a4..fb989b2b3 100644 --- a/models/review.go +++ b/models/review.go @@ -223,6 +223,11 @@ func getCurrentReview(e Engine, reviewer *User, issue *Issue) (*Review, error) { return reviews[0], nil } +// ReviewExists returns whether a review exists for a particular line of code in the PR +func ReviewExists(issue *Issue, treePath string, line int64) (bool, error) { + return x.Cols("id").Exist(&Comment{IssueID: issue.ID, TreePath: treePath, Line: line, Type: CommentTypeCode}) +} + // GetCurrentReview returns the current pending review of reviewer for given issue func GetCurrentReview(reviewer *User, issue *Issue) (*Review, error) { return getCurrentReview(x, reviewer, issue) diff --git a/services/pull/review.go b/services/pull/review.go index 880647c6b..29cd4fb71 100644 --- a/services/pull/review.go +++ b/services/pull/review.go @@ -19,9 +19,28 @@ import ( // CreateCodeComment creates a comment on the code line func CreateCodeComment(doer *models.User, issue *models.Issue, line int64, content string, treePath string, isReview bool, replyReviewID int64) (*models.Comment, error) { - // It's not a review, maybe a reply to a review comment or a single comment. + + var ( + existsReview bool + err error + ) + + // CreateCodeComment() is used for: + // - Single comments + // - Comments that are part of a review + // - Comments that reply to an existing review + if !isReview { - if err := issue.LoadRepo(); err != nil { + // It's not part of a review; maybe a reply to a review comment or a single comment. + // Check if there are reviews for that line already; if there are, this is a reply + if existsReview, err = models.ReviewExists(issue, treePath, line); err != nil { + return nil, err + } + } + + // Comments that are replies don't require a review header to show up in the issue view + if !isReview && existsReview { + if err = issue.LoadRepo(); err != nil { return nil, err } @@ -72,7 +91,14 @@ func CreateCodeComment(doer *models.User, issue *models.Issue, line int64, conte return nil, err } - // NOTICE: it's a pending review, so the notifications will not be fired until user submit review. + if !isReview && !existsReview { + // Submit the review we've just created so the comment shows up in the issue view + if _, _, err = SubmitReview(doer, issue, models.ReviewTypeComment, ""); err != nil { + return nil, err + } + } + + // NOTICE: if it's a pending review the notifications will not be fired until user submit review. return comment, nil }