diff options
Diffstat (limited to 'app/models/project_services')
-rw-r--r-- | app/models/project_services/emails_on_push_service.rb | 20 |
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 |