debian-mirror-gitlab/app/workers/emails_on_push_worker.rb

62 lines
1.7 KiB
Ruby
Raw Normal View History

2014-09-02 18:07:02 +05:30
class EmailsOnPushWorker
include Sidekiq::Worker
2015-04-26 12:48:37 +05:30
def perform(project_id, recipients, push_data, options = {})
options.symbolize_keys!
options.reverse_merge!(
send_from_committer_email: false,
disable_diffs: false
)
send_from_committer_email = options[:send_from_committer_email]
disable_diffs = options[:disable_diffs]
2014-09-02 18:07:02 +05:30
project = Project.find(project_id)
before_sha = push_data["before"]
after_sha = push_data["after"]
2015-04-26 12:48:37 +05:30
ref = push_data["ref"]
2014-09-02 18:07:02 +05:30
author_id = push_data["user_id"]
2015-04-26 12:48:37 +05:30
action =
if Gitlab::Git.blank_ref?(before_sha)
:create
elsif Gitlab::Git.blank_ref?(after_sha)
:delete
else
:push
end
compare = nil
reverse_compare = false
if action == :push
compare = Gitlab::Git::Compare.new(project.repository.raw_repository, before_sha, after_sha)
2014-09-02 18:07:02 +05:30
2015-04-26 12:48:37 +05:30
return false if compare.same
2014-09-02 18:07:02 +05:30
2015-04-26 12:48:37 +05:30
if compare.commits.empty?
compare = Gitlab::Git::Compare.new(project.repository.raw_repository, after_sha, before_sha)
reverse_compare = true
return false if compare.commits.empty?
end
end
2014-09-02 18:07:02 +05:30
recipients.split(" ").each do |recipient|
2015-04-26 12:48:37 +05:30
Notify.repository_push_email(
project_id,
recipient,
author_id: author_id,
ref: ref,
action: action,
compare: compare,
reverse_compare: reverse_compare,
send_from_committer_email: send_from_committer_email,
disable_diffs: disable_diffs
).deliver
2014-09-02 18:07:02 +05:30
end
2015-04-26 12:48:37 +05:30
ensure
compare = nil
GC.start
2014-09-02 18:07:02 +05:30
end
end