]> source.dussan.org Git - gitea.git/commitdiff
Fix show single review comments in the PR page (#9143)
authorguillep2k <18600385+guillep2k@users.noreply.github.com>
Sun, 24 Nov 2019 05:46:16 +0000 (02:46 -0300)
committertechknowlogick <techknowlogick@gitea.io>
Sun, 24 Nov 2019 05:46:16 +0000 (00:46 -0500)
models/review.go
services/pull/review.go

index 0dc44a2a4cb3e5f28a02b2e01c6bbc712dfab8a7..fb989b2b358cb9e64c68bf63c6552d5692911df1 100644 (file)
@@ -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)
index 880647c6b57ee3be891251bf6bb9748b69dbf940..29cd4fb716b53dc897dd332cfead75200c1c5636 100644 (file)
@@ -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
 }