121 lines
3.6 KiB
Ruby
121 lines
3.6 KiB
Ruby
![]() |
module Gitlab
|
||
|
module Email
|
||
|
module Message
|
||
|
class RepositoryPush
|
||
|
attr_reader :compare, :reverse_compare, :send_from_committer_email,
|
||
|
:disable_diffs, :action, :ref, :author_id
|
||
|
attr_accessor :recipient
|
||
|
|
||
|
def initialize(notify, project_id, recipient, opts = {})
|
||
|
raise ArgumentError, 'Missing arguments: author_id, ref, action' unless
|
||
|
opts[:author_id] && opts[:ref] && opts[:action]
|
||
|
|
||
|
@notify = notify
|
||
|
@project_id = project_id
|
||
|
@recipient = recipient
|
||
|
|
||
|
@author_id = opts[:author_id]
|
||
|
@ref = opts[:ref]
|
||
|
@action = opts[:action]
|
||
|
|
||
|
@compare = opts[:compare] || nil
|
||
|
@reverse_compare = opts[:reverse_compare] || false
|
||
|
@send_from_committer_email = opts[:send_from_committer_email] || false
|
||
|
@disable_diffs = opts[:disable_diffs] || false
|
||
|
|
||
|
@author = author
|
||
|
@project = project
|
||
|
@commits = commits
|
||
|
@diffs = diffs
|
||
|
@ref_name = ref_name
|
||
|
@ref_type = ref_type
|
||
|
@action_name = action_name
|
||
|
end
|
||
|
|
||
|
def project
|
||
|
Project.find(@project_id)
|
||
|
end
|
||
|
|
||
|
def author
|
||
|
User.find(@author_id)
|
||
|
end
|
||
|
|
||
|
def commits
|
||
|
Commit.decorate(@compare.commits, @project) if @compare
|
||
|
end
|
||
|
|
||
|
def diffs
|
||
|
@compare.diffs if @compare
|
||
|
end
|
||
|
|
||
|
def action_name
|
||
|
case @action
|
||
|
when :create
|
||
|
'pushed new'
|
||
|
when :delete
|
||
|
'deleted'
|
||
|
else
|
||
|
'pushed to'
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def subject
|
||
|
subject_text = '[Git]'
|
||
|
subject_text << "[#{@project.path_with_namespace}]"
|
||
|
subject_text << "[#{@ref_name}]" if @action == :push
|
||
|
subject_text << ' '
|
||
|
|
||
|
if @action == :push
|
||
|
if @commits.length > 1
|
||
|
subject_text << "Deleted " if @reverse_compare
|
||
|
subject_text << "#{@commits.length} commits: #{@commits.first.title}"
|
||
|
else
|
||
|
subject_text << "Deleted 1 commit: " if @reverse_compare
|
||
|
subject_text << @commits.first.title
|
||
|
end
|
||
|
else
|
||
|
subject_action = @action_name.dup
|
||
|
subject_action[0] = subject_action[0].capitalize
|
||
|
subject_text << "#{subject_action} #{@ref_type} #{@ref_name}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def ref_name
|
||
|
Gitlab::Git.ref_name(@ref)
|
||
|
end
|
||
|
|
||
|
def ref_type
|
||
|
Gitlab::Git.tag_ref?(@ref) ? 'tag' : 'branch'
|
||
|
end
|
||
|
|
||
|
def target_url
|
||
|
if @action == :push
|
||
|
if @commits.length > 1
|
||
|
@notify.namespace_project_compare_url(@project.namespace,
|
||
|
@project,
|
||
|
from: Commit.new(@compare.base, @project),
|
||
|
to: Commit.new(@compare.head, @project))
|
||
|
else
|
||
|
@notify.namespace_project_commit_url(@project.namespace,
|
||
|
@project, @commits.first)
|
||
|
end
|
||
|
else
|
||
|
unless @action == :delete
|
||
|
@notify.namespace_project_tree_url(@project.namespace,
|
||
|
@project, @ref_name)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def reply_to
|
||
|
if @send_from_committer_email && @notify.can_send_from_user_email?(@author)
|
||
|
@author.email
|
||
|
else
|
||
|
Gitlab.config.gitlab.email_reply_to
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|