Commit 4beba749 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Improve Messagee::RepositoryPush

parent e2f937ce
...@@ -65,20 +65,20 @@ module Emails ...@@ -65,20 +65,20 @@ module Emails
@project = repository_push.project @project = repository_push.project
@current_user = @author = repository_push.author @current_user = @author = repository_push.author
@reverse_compare = repository_push.reverse_compare
@compare = repository_push.compare @compare = repository_push.compare
@ref_name = repository_push.ref_name @ref_name = repository_push.ref_name
@ref_type = repository_push.ref_type @ref_type = repository_push.ref_type
@action = repository_push.action @action = repository_push.action
@action_name = repository_push.action_name @action_name = repository_push.action_name
@disable_diffs = repository_push.disable_diffs
@commits = repository_push.commits @commits = repository_push.commits
@diffs = repository_push.diffs @diffs = repository_push.diffs
@target_url = repository_push.target_url @target_url = repository_push.target_url
@disable_diffs = repository_push.disable_diffs?
@reverse_compare = repository_push.reverse_compare?
@disable_footer = true @disable_footer = true
mail(from: sender(repository_push.author_id, mail(from: sender(repository_push.author_id,
repository_push.send_from_committer_email), repository_push.send_from_committer_email?),
reply_to: repository_push.reply_to, reply_to: repository_push.reply_to,
to: repository_push.recipient, to: repository_push.recipient,
subject: repository_push.subject) subject: repository_push.subject)
......
...@@ -2,118 +2,122 @@ module Gitlab ...@@ -2,118 +2,122 @@ module Gitlab
module Email module Email
module Message module Message
class RepositoryPush class RepositoryPush
attr_reader :compare, :reverse_compare, :send_from_committer_email,
:disable_diffs, :action, :ref, :author_id
attr_accessor :recipient attr_accessor :recipient
attr_reader :author_id, :ref, :action
def initialize(notify, project_id, recipient, opts = {}) def initialize(notify, project_id, recipient, opts = {})
raise ArgumentError, 'Missing arguments: author_id, ref, action' unless raise ArgumentError, 'Missing options: author_id, ref, action' unless
opts[:author_id] && opts[:ref] && opts[:action] opts[:author_id] && opts[:ref] && opts[:action]
@notify = notify @notify = notify
@project_id = project_id @project_id = project_id
@recipient = recipient @recipient = recipient
@opts = opts
@author_id = opts[:author_id] @author_id = opts.delete(:author_id)
@ref = opts[:ref] @ref = opts.delete(:ref)
@action = opts[:action] @action = opts.delete(: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 end
def project def project
Project.find(@project_id) @project ||= Project.find(@project_id)
end end
def author def author
User.find(@author_id) @author ||= User.find(@author_id)
end end
def commits def commits
Commit.decorate(@compare.commits, @project) if @compare @commits ||= (Commit.decorate(compare.commits, project) if compare)
end end
def diffs def diffs
@compare.diffs if @compare @diffs ||= (compare.diffs if compare)
end end
def action_name def compare
case @action @opts[:compare]
when :create
'pushed new'
when :delete
'deleted'
else
'pushed to'
end
end end
def subject def reverse_compare?
subject_text = '[Git]' @opts[:reverse_compare] || false
subject_text << "[#{@project.path_with_namespace}]" end
subject_text << "[#{@ref_name}]" if @action == :push
subject_text << ' '
if @action == :push def disable_diffs?
if @commits.length > 1 @opts[:disable_diffs] || false
subject_text << "Deleted " if @reverse_compare end
subject_text << "#{@commits.length} commits: #{@commits.first.title}"
def send_from_committer_email?
@opts[:send_from_committer_email] || false
end
def action_name
@action_name ||=
case @action
when :create
'pushed new'
when :delete
'deleted'
else else
subject_text << "Deleted 1 commit: " if @reverse_compare 'pushed to'
subject_text << @commits.first.title
end end
else
subject_action = @action_name.dup
subject_action[0] = subject_action[0].capitalize
subject_text << "#{subject_action} #{@ref_type} #{@ref_name}"
end
end end
def ref_name def ref_name
Gitlab::Git.ref_name(@ref) @ref_name ||= Gitlab::Git.ref_name(@ref)
end end
def ref_type def ref_type
Gitlab::Git.tag_ref?(@ref) ? 'tag' : 'branch' @ref_type ||= Gitlab::Git.tag_ref?(@ref) ? 'tag' : 'branch'
end end
def target_url def target_url
if @action == :push if @action == :push
if @commits.length > 1 if commits.length > 1 && compare
@notify.namespace_project_compare_url(@project.namespace, @notify.namespace_project_compare_url(project.namespace,
@project, project,
from: Commit.new(@compare.base, @project), from: Commit.new(compare.base, project),
to: Commit.new(@compare.head, @project)) to: Commit.new(compare.head, project))
else else
@notify.namespace_project_commit_url(@project.namespace, @notify.namespace_project_commit_url(project.namespace,
@project, @commits.first) project, commits.first)
end end
else else
unless @action == :delete unless @action == :delete
@notify.namespace_project_tree_url(@project.namespace, @notify.namespace_project_tree_url(project.namespace,
@project, @ref_name) project, ref_name)
end end
end end
end end
def reply_to def reply_to
if @send_from_committer_email && @notify.can_send_from_user_email?(@author) if send_from_committer_email? && @notify.can_send_from_user_email?(author)
@author.email author.email
else else
Gitlab.config.gitlab.email_reply_to Gitlab.config.gitlab.email_reply_to
end end
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
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment