summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2022-07-19 17:46:33 +0200
committerGitHub <noreply@github.com>2022-07-19 17:46:33 +0200
commite930d66a9c05084070c2984a29d7ffcd05fd51fb (patch)
treebd2744204b04021153e236c9180baaddd6e3b235
parent2c93bd79f2a97f38c9e5f36468d1fbbe1e6872c6 (diff)
downloadgitea-e930d66a9c05084070c2984a29d7ffcd05fd51fb.tar.gz
gitea-e930d66a9c05084070c2984a29d7ffcd05fd51fb.zip
Dismiss prior pull reviews if done via web in review dismiss (#20197) (#20407)
-rw-r--r--models/issues/review.go30
-rw-r--r--modules/structs/pull_review.go1
-rw-r--r--routers/api/v1/repo/pull_review.go8
-rw-r--r--routers/web/repo/pull_review.go2
-rw-r--r--services/pull/review.go19
-rw-r--r--templates/swagger/v1_json.tmpl4
6 files changed, 58 insertions, 6 deletions
diff --git a/models/issues/review.go b/models/issues/review.go
index ee65bec3f8..c43e688ad1 100644
--- a/models/issues/review.go
+++ b/models/issues/review.go
@@ -19,6 +19,7 @@ import (
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/modules/timeutil"
+ "code.gitea.io/gitea/modules/util"
"xorm.io/builder"
)
@@ -474,6 +475,35 @@ func SubmitReview(doer *user_model.User, issue *Issue, reviewType ReviewType, co
return review, comm, committer.Commit()
}
+// GetReviewOptions represent filter options for GetReviews
+type GetReviewOptions struct {
+ IssueID int64
+ ReviewerID int64
+ Dismissed util.OptionalBool
+}
+
+// GetReviews return reviews based on GetReviewOptions
+func GetReviews(ctx context.Context, opts *GetReviewOptions) ([]*Review, error) {
+ if opts == nil {
+ return nil, fmt.Errorf("opts are nil")
+ }
+
+ sess := db.GetEngine(ctx)
+
+ if opts.IssueID != 0 {
+ sess = sess.Where("issue_id=?", opts.IssueID)
+ }
+ if opts.ReviewerID != 0 {
+ sess = sess.Where("reviewer_id=?", opts.ReviewerID)
+ }
+ if !opts.Dismissed.IsNone() {
+ sess = sess.Where("dismissed=?", opts.Dismissed.IsTrue())
+ }
+
+ reviews := make([]*Review, 0, 4)
+ return reviews, sess.Find(&reviews)
+}
+
// GetReviewersByIssueID gets the latest review of each reviewer for a pull request
func GetReviewersByIssueID(issueID int64) ([]*Review, error) {
reviews := make([]*Review, 0, 10)
diff --git a/modules/structs/pull_review.go b/modules/structs/pull_review.go
index 6544604acb..7c9360a0c2 100644
--- a/modules/structs/pull_review.go
+++ b/modules/structs/pull_review.go
@@ -97,6 +97,7 @@ type SubmitPullReviewOptions struct {
// DismissPullReviewOptions are options to dismiss a pull review
type DismissPullReviewOptions struct {
Message string `json:"message"`
+ Priors bool `json:"priors"`
}
// PullReviewRequestOptions are options to add or remove pull review requests
diff --git a/routers/api/v1/repo/pull_review.go b/routers/api/v1/repo/pull_review.go
index 1b61a40222..f36d0586ab 100644
--- a/routers/api/v1/repo/pull_review.go
+++ b/routers/api/v1/repo/pull_review.go
@@ -823,7 +823,7 @@ func DismissPullReview(ctx *context.APIContext) {
// "422":
// "$ref": "#/responses/validationError"
opts := web.GetForm(ctx).(*api.DismissPullReviewOptions)
- dismissReview(ctx, opts.Message, true)
+ dismissReview(ctx, opts.Message, true, opts.Priors)
}
// UnDismissPullReview cancel to dismiss a review for a pull request
@@ -863,10 +863,10 @@ func UnDismissPullReview(ctx *context.APIContext) {
// "$ref": "#/responses/forbidden"
// "422":
// "$ref": "#/responses/validationError"
- dismissReview(ctx, "", false)
+ dismissReview(ctx, "", false, false)
}
-func dismissReview(ctx *context.APIContext, msg string, isDismiss bool) {
+func dismissReview(ctx *context.APIContext, msg string, isDismiss, dismissPriors bool) {
if !ctx.Repo.IsAdmin() {
ctx.Error(http.StatusForbidden, "", "Must be repo admin")
return
@@ -886,7 +886,7 @@ func dismissReview(ctx *context.APIContext, msg string, isDismiss bool) {
return
}
- _, err := pull_service.DismissReview(ctx, review.ID, ctx.Repo.Repository.ID, msg, ctx.Doer, isDismiss)
+ _, err := pull_service.DismissReview(ctx, review.ID, ctx.Repo.Repository.ID, msg, ctx.Doer, isDismiss, dismissPriors)
if err != nil {
ctx.Error(http.StatusInternalServerError, "pull_service.DismissReview", err)
return
diff --git a/routers/web/repo/pull_review.go b/routers/web/repo/pull_review.go
index 5a9f7a8138..bc64f35472 100644
--- a/routers/web/repo/pull_review.go
+++ b/routers/web/repo/pull_review.go
@@ -242,7 +242,7 @@ func SubmitReview(ctx *context.Context) {
// DismissReview dismissing stale review by repo admin
func DismissReview(ctx *context.Context) {
form := web.GetForm(ctx).(*forms.DismissReviewForm)
- comm, err := pull_service.DismissReview(ctx, form.ReviewID, ctx.Repo.Repository.ID, form.Message, ctx.Doer, true)
+ comm, err := pull_service.DismissReview(ctx, form.ReviewID, ctx.Repo.Repository.ID, form.Message, ctx.Doer, true, true)
if err != nil {
ctx.ServerError("pull_service.DismissReview", err)
return
diff --git a/services/pull/review.go b/services/pull/review.go
index b40e20a26f..bfc7b7cdd6 100644
--- a/services/pull/review.go
+++ b/services/pull/review.go
@@ -20,6 +20,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/util"
)
// CreateCodeComment creates a comment on the code line
@@ -271,7 +272,7 @@ func SubmitReview(ctx context.Context, doer *user_model.User, gitRepo *git.Repos
}
// DismissReview dismissing stale review by repo admin
-func DismissReview(ctx context.Context, reviewID, repoID int64, message string, doer *user_model.User, isDismiss bool) (comment *issues_model.Comment, err error) {
+func DismissReview(ctx context.Context, reviewID, repoID int64, message string, doer *user_model.User, isDismiss, dismissPriors bool) (comment *issues_model.Comment, err error) {
review, err := issues_model.GetReviewByID(ctx, reviewID)
if err != nil {
return
@@ -295,6 +296,22 @@ func DismissReview(ctx context.Context, reviewID, repoID int64, message string,
return
}
+ if dismissPriors {
+ reviews, err := issues_model.GetReviews(ctx, &issues_model.GetReviewOptions{
+ IssueID: review.IssueID,
+ ReviewerID: review.ReviewerID,
+ Dismissed: util.OptionalBoolFalse,
+ })
+ if err != nil {
+ return nil, err
+ }
+ for _, oldReview := range reviews {
+ if err = issues_model.DismissReview(oldReview, true); err != nil {
+ return nil, err
+ }
+ }
+ }
+
if !isDismiss {
return nil, nil
}
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 4da8b12af4..63ef828606 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -14803,6 +14803,10 @@
"message": {
"type": "string",
"x-go-name": "Message"
+ },
+ "priors": {
+ "type": "boolean",
+ "x-go-name": "Priors"
}
},
"x-go-package": "code.gitea.io/gitea/modules/structs"