summaryrefslogtreecommitdiff
path: root/app/models/project_services
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/project_services')
-rw-r--r--app/models/project_services/emails_on_push_service.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/app/models/project_services/emails_on_push_service.rb b/app/models/project_services/emails_on_push_service.rb
index 8ca40138a8f..eb78938324d 100644
--- a/app/models/project_services/emails_on_push_service.rb
+++ b/app/models/project_services/emails_on_push_service.rb
@@ -1,9 +1,11 @@
# frozen_string_literal: true
class EmailsOnPushService < Service
+ include NotificationBranchSelection
+
boolean_accessor :send_from_committer_email
boolean_accessor :disable_diffs
- prop_accessor :recipients
+ prop_accessor :recipients, :branches_to_be_notified
validates :recipients, presence: true, if: :valid_recipients?
def title
@@ -22,9 +24,17 @@ class EmailsOnPushService < Service
%w(push tag_push)
end
+ def initialize_properties
+ if properties.nil?
+ self.properties = {}
+ self.branches_to_be_notified ||= "all"
+ end
+ end
+
def execute(push_data)
return unless supported_events.include?(push_data[:object_kind])
return if project.emails_disabled?
+ return unless notify_for_ref?(push_data)
EmailsOnPushWorker.perform_async(
project_id,
@@ -35,6 +45,13 @@ class EmailsOnPushService < Service
)
end
+ def notify_for_ref?(push_data)
+ return true if push_data[:object_kind] == 'tag_push'
+ return true if push_data.dig(:object_attributes, :tag)
+
+ notify_for_branch?(push_data)
+ end
+
def send_from_committer_email?
Gitlab::Utils.to_boolean(self.send_from_committer_email)
end
@@ -50,6 +67,7 @@ class EmailsOnPushService < Service
help: s_("EmailsOnPushService|Send notifications from the committer's email address if the domain is part of the domain GitLab is running on (e.g. %{domains}).") % { domains: domains } },
{ type: 'checkbox', name: 'disable_diffs', title: s_("EmailsOnPushService|Disable code diffs"),
help: s_("EmailsOnPushService|Don't include possibly sensitive code diffs in notification body.") },
+ { type: 'select', name: 'branches_to_be_notified', choices: BRANCH_CHOICES },
{ type: 'textarea', name: 'recipients', placeholder: s_('EmailsOnPushService|Emails separated by whitespace') }
]
end