diff --git a/app/models/project_services/emails_on_push_service.rb b/app/models/project_services/emails_on_push_service.rb index 73458098400d3a4e06a17b2de89cdc75c8af3eb4..2a46eff7846eddcfc7d32014464e4d7f743ff074 100644 --- a/app/models/project_services/emails_on_push_service.rb +++ b/app/models/project_services/emails_on_push_service.rb @@ -33,24 +33,7 @@ class EmailsOnPushService < Service end def execute(push_data) - before_sha = push_data[:before] - after_sha = push_data[:after] - branch = push_data[:ref] - author_id = push_data[:user_id] - - if before_sha =~ /^000000/ || after_sha =~ /^000000/ - # skip if new branch was pushed or branch was removed - return true - end - - compare = Gitlab::Git::Compare.new(project.repository.raw_repository, before_sha, after_sha) - - # Do not send emails if git compare failed - return false unless compare && compare.commits.present? - - recipients.split(" ").each do |recipient| - Notify.delay.repository_push_email(project_id, recipient, author_id, branch, compare) - end + EmailsOnPushWorker.perform_async(project_id, recipients, push_data) end def fields @@ -59,4 +42,3 @@ class EmailsOnPushService < Service ] end end - diff --git a/app/workers/emails_on_push_worker.rb b/app/workers/emails_on_push_worker.rb new file mode 100644 index 0000000000000000000000000000000000000000..9982b362a1043a4b9af17503ae5fad99703c9fa1 --- /dev/null +++ b/app/workers/emails_on_push_worker.rb @@ -0,0 +1,25 @@ +class EmailsOnPushWorker + include Sidekiq::Worker + + def perform(project_id, recipients, push_data) + project = Project.find(project_id) + before_sha = push_data["before"] + after_sha = push_data["after"] + branch = push_data["ref"] + author_id = push_data["user_id"] + + if before_sha =~ /^000000/ || after_sha =~ /^000000/ + # skip if new branch was pushed or branch was removed + return true + end + + compare = Gitlab::Git::Compare.new(project.repository.raw_repository, before_sha, after_sha) + + # Do not send emails if git compare failed + return false unless compare && compare.commits.present? + + recipients.split(" ").each do |recipient| + Notify.delay.repository_push_email(project_id, recipient, author_id, branch, compare) + end + end +end