summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/convert/pull_review.go1
-rw-r--r--modules/forms/repo_form.go6
-rw-r--r--modules/notification/action/action.go20
-rw-r--r--modules/notification/base/notifier.go1
-rw-r--r--modules/notification/base/null.go4
-rw-r--r--modules/notification/mail/mail.go6
-rw-r--r--modules/notification/notification.go7
-rw-r--r--modules/notification/ui/ui.go9
-rw-r--r--modules/structs/pull_review.go6
-rw-r--r--modules/templates/helper.go2
10 files changed, 62 insertions, 0 deletions
diff --git a/modules/convert/pull_review.go b/modules/convert/pull_review.go
index 0ef1fec39c..d1d6e767d4 100644
--- a/modules/convert/pull_review.go
+++ b/modules/convert/pull_review.go
@@ -34,6 +34,7 @@ func ToPullReview(r *models.Review, doer *models.User) (*api.PullReview, error)
CommitID: r.CommitID,
Stale: r.Stale,
Official: r.Official,
+ Dismissed: r.Dismissed,
CodeCommentsCount: r.GetCodeCommentsCount(),
Submitted: r.CreatedUnix.AsTime(),
HTMLURL: r.HTMLURL(),
diff --git a/modules/forms/repo_form.go b/modules/forms/repo_form.go
index f177b21f05..48af3450f3 100644
--- a/modules/forms/repo_form.go
+++ b/modules/forms/repo_form.go
@@ -622,6 +622,12 @@ func (f SubmitReviewForm) HasEmptyContent() bool {
len(strings.TrimSpace(f.Content)) == 0
}
+// DismissReviewForm for dismissing stale review by repo admin
+type DismissReviewForm struct {
+ ReviewID int64 `binding:"Required"`
+ Message string
+}
+
// __________ .__
// \______ \ ____ | | ____ _____ ______ ____
// | _// __ \| | _/ __ \\__ \ / ___// __ \
diff --git a/modules/notification/action/action.go b/modules/notification/action/action.go
index 360906f076..836cb51b3e 100644
--- a/modules/notification/action/action.go
+++ b/modules/notification/action/action.go
@@ -275,6 +275,26 @@ func (*actionNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mode
}
}
+func (*actionNotifier) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
+ reviewerName := review.Reviewer.Name
+ if len(review.OriginalAuthor) > 0 {
+ reviewerName = review.OriginalAuthor
+ }
+ if err := models.NotifyWatchers(&models.Action{
+ ActUserID: doer.ID,
+ ActUser: doer,
+ OpType: models.ActionPullReviewDismissed,
+ Content: fmt.Sprintf("%d|%s|%s", review.Issue.Index, reviewerName, comment.Content),
+ RepoID: review.Issue.Repo.ID,
+ Repo: review.Issue.Repo,
+ IsPrivate: review.Issue.Repo.IsPrivate,
+ CommentID: comment.ID,
+ Comment: comment,
+ }); err != nil {
+ log.Error("NotifyWatchers [%d]: %v", review.Issue.ID, err)
+ }
+}
+
func (a *actionNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
data, err := json.Marshal(commits)
if err != nil {
diff --git a/modules/notification/base/notifier.go b/modules/notification/base/notifier.go
index b01026dfc5..5bb833d275 100644
--- a/modules/notification/base/notifier.go
+++ b/modules/notification/base/notifier.go
@@ -39,6 +39,7 @@ type Notifier interface {
NotifyPullRequestCodeComment(pr *models.PullRequest, comment *models.Comment, mentions []*models.User)
NotifyPullRequestChangeTargetBranch(doer *models.User, pr *models.PullRequest, oldBranch string)
NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment)
+ NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment)
NotifyCreateIssueComment(doer *models.User, repo *models.Repository,
issue *models.Issue, comment *models.Comment, mentions []*models.User)
diff --git a/modules/notification/base/null.go b/modules/notification/base/null.go
index d80ba859f3..2386f925ce 100644
--- a/modules/notification/base/null.go
+++ b/modules/notification/base/null.go
@@ -62,6 +62,10 @@ func (*NullNotifier) NotifyPullRequestChangeTargetBranch(doer *models.User, pr *
func (*NullNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, comment *models.Comment) {
}
+// NotifyPullRevieweDismiss notifies when a review was dismissed by repo admin
+func (*NullNotifier) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
+}
+
// NotifyUpdateComment places a place holder function
func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
}
diff --git a/modules/notification/mail/mail.go b/modules/notification/mail/mail.go
index ee8a0c436c..f984ea7661 100644
--- a/modules/notification/mail/mail.go
+++ b/modules/notification/mail/mail.go
@@ -152,6 +152,12 @@ func (m *mailNotifier) NotifyPullRequestPushCommits(doer *models.User, pr *model
m.NotifyCreateIssueComment(doer, comment.Issue.Repo, comment.Issue, comment, nil)
}
+func (m *mailNotifier) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
+ if err := mailer.MailParticipantsComment(comment, models.ActionPullReviewDismissed, review.Issue, []*models.User{}); err != nil {
+ log.Error("MailParticipantsComment: %v", err)
+ }
+}
+
func (m *mailNotifier) NotifyNewRelease(rel *models.Release) {
if err := rel.LoadAttributes(); err != nil {
log.Error("NotifyNewRelease: %v", err)
diff --git a/modules/notification/notification.go b/modules/notification/notification.go
index 7ced57ce2d..d22d157bec 100644
--- a/modules/notification/notification.go
+++ b/modules/notification/notification.go
@@ -108,6 +108,13 @@ func NotifyPullRequestPushCommits(doer *models.User, pr *models.PullRequest, com
}
}
+// NotifyPullRevieweDismiss notifies when a review was dismissed by repo admin
+func NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
+ for _, notifier := range notifiers {
+ notifier.NotifyPullRevieweDismiss(doer, review, comment)
+ }
+}
+
// NotifyUpdateComment notifies update comment to notifiers
func NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) {
for _, notifier := range notifiers {
diff --git a/modules/notification/ui/ui.go b/modules/notification/ui/ui.go
index 8e510e9cd4..25ea4d91c6 100644
--- a/modules/notification/ui/ui.go
+++ b/modules/notification/ui/ui.go
@@ -161,6 +161,15 @@ func (ns *notificationService) NotifyPullRequestPushCommits(doer *models.User, p
_ = ns.issueQueue.Push(opts)
}
+func (ns *notificationService) NotifyPullRevieweDismiss(doer *models.User, review *models.Review, comment *models.Comment) {
+ var opts = issueNotificationOpts{
+ IssueID: review.IssueID,
+ NotificationAuthorID: doer.ID,
+ CommentID: comment.ID,
+ }
+ _ = ns.issueQueue.Push(opts)
+}
+
func (ns *notificationService) NotifyIssueChangeAssignee(doer *models.User, issue *models.Issue, assignee *models.User, removed bool, comment *models.Comment) {
if !removed {
var opts = issueNotificationOpts{
diff --git a/modules/structs/pull_review.go b/modules/structs/pull_review.go
index 07fa968d28..261d00fde8 100644
--- a/modules/structs/pull_review.go
+++ b/modules/structs/pull_review.go
@@ -36,6 +36,7 @@ type PullReview struct {
CommitID string `json:"commit_id"`
Stale bool `json:"stale"`
Official bool `json:"official"`
+ Dismissed bool `json:"dismissed"`
CodeCommentsCount int `json:"comments_count"`
// swagger:strfmt date-time
Submitted time.Time `json:"submitted_at"`
@@ -92,6 +93,11 @@ type SubmitPullReviewOptions struct {
Body string `json:"body"`
}
+// DismissPullReviewOptions are options to dismiss a pull review
+type DismissPullReviewOptions struct {
+ Message string `json:"message"`
+}
+
// PullReviewRequestOptions are options to add or remove pull review requests
type PullReviewRequestOptions struct {
Reviewers []string `json:"reviewers"`
diff --git a/modules/templates/helper.go b/modules/templates/helper.go
index 987a6ad983..b8e4f5d505 100644
--- a/modules/templates/helper.go
+++ b/modules/templates/helper.go
@@ -798,6 +798,8 @@ func ActionIcon(opType models.ActionType) string {
return "diff"
case models.ActionPublishRelease:
return "tag"
+ case models.ActionPullReviewDismissed:
+ return "x"
default:
return "question"
}