Commit 9dd50b57 authored by Robert Speicher's avatar Robert Speicher

Merge branch...

Merge branch 'jimmykarily/gitlab-ce-notify_current_user_when_merging_an_mr_after_build_succeeds' into 'master'

Notify current_user about automatic merge after successful build

It enables notifications to the initiator of a merge when the MR is flagged as "Merge when build succeeds".

Because when running Builds, quite some time passes between the user's
action and the actual Merge so it is a good thing to notify the
initiator of the Merge when it actually happens.

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/14409

See merge request !6534
parents e64594ac 6e6f34bf
...@@ -30,6 +30,7 @@ v 8.13.0 (unreleased) ...@@ -30,6 +30,7 @@ v 8.13.0 (unreleased)
- Fix resolved discussion display in side-by-side diff view !6575 - Fix resolved discussion display in side-by-side diff view !6575
- Optimize GitHub importing for speed and memory - Optimize GitHub importing for speed and memory
- API: expose pipeline data in builds API (!6502, Guilherme Salazar) - API: expose pipeline data in builds API (!6502, Guilherme Salazar)
- Notify the Merger about merge after successful build (Dimitris Karakasilis)
- Fix broken repository 500 errors in project list - Fix broken repository 500 errors in project list
- Close todos when accepting merge requests via the API !6486 (tonygambone) - Close todos when accepting merge requests via the API !6486 (tonygambone)
......
...@@ -134,7 +134,8 @@ class NotificationService ...@@ -134,7 +134,8 @@ class NotificationService
merge_request, merge_request,
merge_request.target_project, merge_request.target_project,
current_user, current_user,
:merged_merge_request_email :merged_merge_request_email,
skip_current_user: !merge_request.merge_when_build_succeeds?
) )
end end
...@@ -514,9 +515,11 @@ class NotificationService ...@@ -514,9 +515,11 @@ class NotificationService
end end
end end
def close_resource_email(target, project, current_user, method) def close_resource_email(target, project, current_user, method, skip_current_user: true)
action = method == :merged_merge_request_email ? "merge" : "close" action = method == :merged_merge_request_email ? "merge" : "close"
recipients = build_recipients(target, project, current_user, action: action)
recipients = build_recipients(target, project, current_user, action: action,
skip_current_user: skip_current_user)
recipients.each do |recipient| recipients.each do |recipient|
mailer.send(method, recipient.id, target.id, current_user.id).deliver_later mailer.send(method, recipient.id, target.id, current_user.id).deliver_later
...@@ -557,7 +560,7 @@ class NotificationService ...@@ -557,7 +560,7 @@ class NotificationService
end end
end end
def build_recipients(target, project, current_user, action: nil, previous_assignee: nil) def build_recipients(target, project, current_user, action: nil, previous_assignee: nil, skip_current_user: true)
custom_action = build_custom_key(action, target) custom_action = build_custom_key(action, target)
recipients = target.participants(current_user) recipients = target.participants(current_user)
...@@ -586,7 +589,8 @@ class NotificationService ...@@ -586,7 +589,8 @@ class NotificationService
recipients = reject_unsubscribed_users(recipients, target) recipients = reject_unsubscribed_users(recipients, target)
recipients = reject_users_without_access(recipients, target) recipients = reject_users_without_access(recipients, target)
recipients.delete(current_user) recipients.delete(current_user) if skip_current_user
recipients.uniq recipients.uniq
end end
......
...@@ -962,6 +962,20 @@ describe NotificationService, services: true do ...@@ -962,6 +962,20 @@ describe NotificationService, services: true do
should_not_email(@u_lazy_participant) should_not_email(@u_lazy_participant)
end end
it "notifies the merger when merge_when_build_succeeds is true" do
merge_request.merge_when_build_succeeds = true
notification.merge_mr(merge_request, @u_watcher)
should_email(@u_watcher)
end
it "does not notify the merger when merge_when_build_succeeds is false" do
merge_request.merge_when_build_succeeds = false
notification.merge_mr(merge_request, @u_watcher)
should_not_email(@u_watcher)
end
context 'participating' do context 'participating' do
context 'by assignee' do context 'by assignee' do
before do before do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment