summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-02-27 11:07:05 +0100
committerGitHub <noreply@github.com>2020-02-27 10:07:05 +0000
commita924a90349a78ebe8e7eb560e435a7ddc1de9b84 (patch)
tree68e12c711eff73d045cd2b3e29ba34706d8fc577
parent9a476113f01602f8418f8f66e7eceac27fd480c5 (diff)
downloadgitea-a924a90349a78ebe8e7eb560e435a7ddc1de9b84.tar.gz
gitea-a924a90349a78ebe8e7eb560e435a7ddc1de9b84.zip
[BugFix] Avoid mailing explicit unwatched (#10475)
* Avoid mailing explicit unwatched * CI.restart() * back to normal Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com>
-rw-r--r--models/issue_watch.go6
-rw-r--r--services/mailer/mail_issue.go10
2 files changed, 12 insertions, 4 deletions
diff --git a/models/issue_watch.go b/models/issue_watch.go
index 9046e4d2f7..dea6aa5a52 100644
--- a/models/issue_watch.go
+++ b/models/issue_watch.go
@@ -64,11 +64,11 @@ func getIssueWatch(e Engine, userID, issueID int64) (iw *IssueWatch, exists bool
return
}
-// GetIssueWatchersIDs returns IDs of subscribers to a given issue id
+// GetIssueWatchersIDs returns IDs of subscribers or explicit unsubscribers to a given issue id
// but avoids joining with `user` for performance reasons
// User permissions must be verified elsewhere if required
-func GetIssueWatchersIDs(issueID int64) ([]int64, error) {
- return getIssueWatchersIDs(x, issueID, true)
+func GetIssueWatchersIDs(issueID int64, watching bool) ([]int64, error) {
+ return getIssueWatchersIDs(x, issueID, watching)
}
func getIssueWatchersIDs(e Engine, issueID int64, watching bool) ([]int64, error) {
diff --git a/services/mailer/mail_issue.go b/services/mailer/mail_issue.go
index 696adfadda..1030a9548e 100644
--- a/services/mailer/mail_issue.go
+++ b/services/mailer/mail_issue.go
@@ -62,7 +62,7 @@ func mailIssueCommentToParticipants(ctx *mailCommentContext, mentions []int64) e
unfiltered = append(unfiltered, ids...)
// =========== Issue watchers ===========
- ids, err = models.GetIssueWatchersIDs(ctx.Issue.ID)
+ ids, err = models.GetIssueWatchersIDs(ctx.Issue.ID, true)
if err != nil {
return fmt.Errorf("GetIssueWatchersIDs(%d): %v", ctx.Issue.ID, err)
}
@@ -80,6 +80,14 @@ func mailIssueCommentToParticipants(ctx *mailCommentContext, mentions []int64) e
// Avoid mailing the doer
visited[ctx.Doer.ID] = true
+ // Avoid mailing explicit unwatched
+ ids, err = models.GetIssueWatchersIDs(ctx.Issue.ID, false)
+ if err != nil {
+ return fmt.Errorf("GetIssueWatchersIDs(%d): %v", ctx.Issue.ID, err)
+ }
+ for _, i := range ids {
+ visited[i] = true
+ }
if err = mailIssueCommentBatch(ctx, unfiltered, visited, false); err != nil {
return fmt.Errorf("mailIssueCommentBatch(): %v", err)