diff options
Diffstat (limited to 'lib/gitlab/merge_requests/commit_message_generator.rb')
-rw-r--r-- | lib/gitlab/merge_requests/commit_message_generator.rb | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/lib/gitlab/merge_requests/commit_message_generator.rb b/lib/gitlab/merge_requests/commit_message_generator.rb index 0e9ec6f5cb3..39247a47bf5 100644 --- a/lib/gitlab/merge_requests/commit_message_generator.rb +++ b/lib/gitlab/merge_requests/commit_message_generator.rb @@ -2,8 +2,9 @@ module Gitlab module MergeRequests class CommitMessageGenerator - def initialize(merge_request:) + def initialize(merge_request:, current_user:) @merge_request = merge_request + @current_user = @merge_request.metrics&.merged_by || @merge_request.merge_user || current_user end def merge_message @@ -21,12 +22,13 @@ module Gitlab private attr_reader :merge_request + attr_reader :current_user PLACEHOLDERS = { - 'source_branch' => ->(merge_request) { merge_request.source_branch.to_s }, - 'target_branch' => ->(merge_request) { merge_request.target_branch.to_s }, - 'title' => ->(merge_request) { merge_request.title }, - 'issues' => ->(merge_request) do + 'source_branch' => ->(merge_request, _) { merge_request.source_branch.to_s }, + 'target_branch' => ->(merge_request, _) { merge_request.target_branch.to_s }, + 'title' => ->(merge_request, _) { merge_request.title }, + 'issues' => ->(merge_request, _) do return "" if merge_request.visible_closing_issues_for.blank? closes_issues_references = merge_request.visible_closing_issues_for.map do |issue| @@ -34,10 +36,13 @@ module Gitlab end "Closes #{closes_issues_references.to_sentence}" end, - 'description' => ->(merge_request) { merge_request.description.presence || '' }, - 'reference' => ->(merge_request) { merge_request.to_reference(full: true) }, - 'first_commit' => -> (merge_request) { merge_request.first_commit&.safe_message&.strip.presence || '' }, - 'first_multiline_commit' => -> (merge_request) { merge_request.first_multiline_commit&.safe_message&.strip.presence || merge_request.title } + 'description' => ->(merge_request, _) { merge_request.description.presence || '' }, + 'reference' => ->(merge_request, _) { merge_request.to_reference(full: true) }, + 'first_commit' => -> (merge_request, _) { merge_request.first_commit&.safe_message&.strip.presence || '' }, + 'first_multiline_commit' => -> (merge_request, _) { merge_request.first_multiline_commit&.safe_message&.strip.presence || merge_request.title }, + 'url' => ->(merge_request, _) { Gitlab::UrlBuilder.build(merge_request) }, + 'approved_by' => ->(merge_request, _) { merge_request.approved_by_users.map { |user| "Approved-by: #{user.name} <#{user.commit_email_or_default}>" }.join("\n") }, + 'merged_by' => ->(_, user) { "#{user&.name} <#{user&.commit_email_or_default}>" } }.freeze PLACEHOLDERS_REGEX = Regexp.union(PLACEHOLDERS.keys.map do |key| @@ -57,14 +62,14 @@ module Gitlab # This allows us to recreate previous default merge commit message behaviour - we skipped new line character # before empty description and before closed issues when none were present. PLACEHOLDERS.each do |key, value| - unless value.call(merge_request).present? + unless value.call(merge_request, current_user).present? message = message.gsub(BLANK_PLACEHOLDERS_REGEXES[key], '') end end Gitlab::StringPlaceholderReplacer .replace_string_placeholders(message, PLACEHOLDERS_REGEX) do |key| - PLACEHOLDERS[key].call(merge_request) + PLACEHOLDERS[key].call(merge_request, current_user) end end end |