Class: MergeRequests::SquashService

Inherits:
Object
  • Object
show all
Includes:
BaseServiceUtility, ErrorLogger
Defined in:
app/services/merge_requests/squash_service.rb

Instance Method Summary collapse

Methods included from ErrorLogger

#log_error

Methods included from BaseServiceUtility

#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level

Methods included from Gitlab::Allowable

#can?

Constructor Details

#initialize(merge_request:, current_user:, commit_message:) ⇒ SquashService

Returns a new instance of SquashService.



8
9
10
11
12
13
# File 'app/services/merge_requests/squash_service.rb', line 8

def initialize(merge_request:, current_user:, commit_message:)
  @merge_request = merge_request
  @target_project = merge_request.target_project
  @current_user = current_user
  @commit_message = commit_message
end

Instance Method Details

#executeObject



15
16
17
18
19
20
21
22
23
24
25
# File 'app/services/merge_requests/squash_service.rb', line 15

def execute
  # If performing a squash would result in no change, then
  # immediately return a success message without performing a squash
  if merge_request.commits_count == 1 && message&.strip == merge_request.first_commit.safe_message&.strip
    return success(squash_sha: merge_request.diff_head_sha)
  end

  return error(s_("MergeRequests|Squashing not allowed: This project doesn't allow you to squash commits when merging.")) if squash_forbidden?

  squash! || error(s_('MergeRequests|Squashing failed: Squash the commits locally, resolve any conflicts, then push the branch.'))
end