summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorJimmy Praet <jimmy.praet@telenet.be>2021-01-08 22:49:55 +0100
committerGitHub <noreply@github.com>2021-01-08 23:49:55 +0200
commitbcb7f352215be12368de937fc0faa91cdb3d639a (patch)
treefa981e5c0110df8a094d7f3e3ba0ffdf2469c194 /routers
parentce43d38b4ffa40255cc8f859c5b31f59351f827c (diff)
downloadgitea-bcb7f352215be12368de937fc0faa91cdb3d639a.tar.gz
gitea-bcb7f352215be12368de937fc0faa91cdb3d639a.zip
Do not reload page after adding comments in Pull Request reviews (#13877)
Fixed #8861 * use ajax on PR review page * handle review comments * extract duplicate code FetchCodeCommentsByLine was initially more or less copied from fetchCodeCommentsByReview. Now they both use a common findCodeComments function instead * use the Engine that was passed into the method Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Lauris BH <lauris@nix.lv>
Diffstat (limited to 'routers')
-rw-r--r--routers/repo/pull_review.go62
-rw-r--r--routers/routes/macaron.go1
2 files changed, 63 insertions, 0 deletions
diff --git a/routers/repo/pull_review.go b/routers/repo/pull_review.go
index 730074b7f3..0bacc68232 100644
--- a/routers/repo/pull_review.go
+++ b/routers/repo/pull_review.go
@@ -9,11 +9,40 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth"
+ "code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
pull_service "code.gitea.io/gitea/services/pull"
)
+const (
+ tplConversation base.TplName = "repo/diff/conversation"
+ tplNewComment base.TplName = "repo/diff/new_comment"
+)
+
+// RenderNewCodeCommentForm will render the form for creating a new review comment
+func RenderNewCodeCommentForm(ctx *context.Context) {
+ issue := GetActionIssue(ctx)
+ if !issue.IsPull {
+ return
+ }
+ currentReview, err := models.GetCurrentReview(ctx.User, issue)
+ if err != nil && !models.IsErrReviewNotExist(err) {
+ ctx.ServerError("GetCurrentReview", err)
+ return
+ }
+ ctx.Data["PageIsPullFiles"] = true
+ ctx.Data["Issue"] = issue
+ ctx.Data["CurrentReview"] = currentReview
+ pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(issue.PullRequest.GetGitRefName())
+ if err != nil {
+ ctx.ServerError("GetRefCommitID", err)
+ return
+ }
+ ctx.Data["AfterCommitID"] = pullHeadCommitID
+ ctx.HTML(200, tplNewComment)
+}
+
// CreateCodeComment will create a code comment including an pending review if required
func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) {
issue := GetActionIssue(ctx)
@@ -58,11 +87,17 @@ func CreateCodeComment(ctx *context.Context, form auth.CodeCommentForm) {
}
log.Trace("Comment created: %-v #%d[%d] Comment[%d]", ctx.Repo.Repository, issue.Index, issue.ID, comment.ID)
+
+ if form.Origin == "diff" {
+ renderConversation(ctx, comment)
+ return
+ }
ctx.Redirect(comment.HTMLURL())
}
// UpdateResolveConversation add or remove an Conversation resolved mark
func UpdateResolveConversation(ctx *context.Context) {
+ origin := ctx.Query("origin")
action := ctx.Query("action")
commentID := ctx.QueryInt64("comment_id")
@@ -103,11 +138,38 @@ func UpdateResolveConversation(ctx *context.Context) {
return
}
+ if origin == "diff" {
+ renderConversation(ctx, comment)
+ return
+ }
ctx.JSON(200, map[string]interface{}{
"ok": true,
})
}
+func renderConversation(ctx *context.Context, comment *models.Comment) {
+ comments, err := models.FetchCodeCommentsByLine(comment.Issue, ctx.User, comment.TreePath, comment.Line)
+ if err != nil {
+ ctx.ServerError("FetchCodeCommentsByLine", err)
+ return
+ }
+ ctx.Data["PageIsPullFiles"] = true
+ ctx.Data["comments"] = comments
+ ctx.Data["CanMarkConversation"] = true
+ ctx.Data["Issue"] = comment.Issue
+ if err = comment.Issue.LoadPullRequest(); err != nil {
+ ctx.ServerError("comment.Issue.LoadPullRequest", err)
+ return
+ }
+ pullHeadCommitID, err := ctx.Repo.GitRepo.GetRefCommitID(comment.Issue.PullRequest.GetGitRefName())
+ if err != nil {
+ ctx.ServerError("GetRefCommitID", err)
+ return
+ }
+ ctx.Data["AfterCommitID"] = pullHeadCommitID
+ ctx.HTML(200, tplConversation)
+}
+
// SubmitReview creates a review out of the existing pending review or creates a new one if no pending review exist
func SubmitReview(ctx *context.Context, form auth.SubmitReviewForm) {
issue := GetActionIssue(ctx)
diff --git a/routers/routes/macaron.go b/routers/routes/macaron.go
index ca3599b7a0..d54cd580d3 100644
--- a/routers/routes/macaron.go
+++ b/routers/routes/macaron.go
@@ -856,6 +856,7 @@ func RegisterMacaronRoutes(m *macaron.Macaron) {
m.Group("/files", func() {
m.Get("", context.RepoRef(), repo.SetEditorconfigIfExists, repo.SetDiffViewStyle, repo.SetWhitespaceBehavior, repo.ViewPullFiles)
m.Group("/reviews", func() {
+ m.Get("/new_comment", repo.RenderNewCodeCommentForm)
m.Post("/comments", bindIgnErr(auth.CodeCommentForm{}), repo.CreateCodeComment)
m.Post("/submit", bindIgnErr(auth.SubmitReviewForm{}), repo.SubmitReview)
}, context.RepoMustNotBeArchived())