Commit 3c867dfa8efec28155158e3b2b7dbb21ba3ce0a1

Authored by Dmitriy Zaporozhets
1 parent 65cd9829

MergeRequest services for create, update, close and reopen

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/services/merge_requests/base_service.rb 0 → 100644
... ... @@ -0,0 +1,16 @@
  1 +module MergeRequests
  2 + class BaseService < ::BaseService
  3 +
  4 + private
  5 +
  6 + def create_note(merge_request)
  7 + Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state, nil)
  8 + end
  9 +
  10 + def execute_hooks(merge_request)
  11 + if merge_request.project
  12 + merge_request.project.execute_hooks(merge_request.to_hook_data, :merge_request_hooks)
  13 + end
  14 + end
  15 + end
  16 +end
... ...
app/services/merge_requests/close_service.rb 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +module MergeRequests
  2 + class CloseService < MergeRequests::BaseService
  3 + def execute(merge_request, commit = nil)
  4 + # If we close MergeRequest we want to ignore validation
  5 + # so we can close broken one (Ex. fork project removed)
  6 + merge_request.allow_broken = true
  7 +
  8 + if merge_request.close
  9 + event_service.close_mr(merge_request, current_user)
  10 + notification_service.close_mr(merge_request, current_user)
  11 + create_note(merge_request)
  12 + execute_hooks(merge_request)
  13 + end
  14 +
  15 + merge_request
  16 + end
  17 + end
  18 +end
... ...
app/services/merge_requests/create_service.rb 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +module MergeReques
  2 + class CreateService < MergeRequests::BaseService
  3 + def execute
  4 + merge_request = MergeRequest.new(params)
  5 + merge_request.source_project = project
  6 + merge_request.author = current_user
  7 +
  8 + if merge_request.save
  9 + event_service.open_mr(merge_request, current_user)
  10 + notification_service.new_merge_request(merge_request, current_user)
  11 + merge_request.create_cross_references!(merge_request.project, current_user)
  12 + execute_hooks(merge_request)
  13 + end
  14 +
  15 + merge_request
  16 + end
  17 + end
  18 +end
... ...
app/services/merge_requests/reopen_service.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +module MergeRequests
  2 + class ReopenService < MergeRequests::BaseService
  3 + def execute(merge_request)
  4 + if merge_request.reopen
  5 + event_service.reopen_mr(merge_request, current_user)
  6 + create_note(merge_request)
  7 + execute_hooks(merge_request)
  8 + merge_request.reload_code
  9 + merge_request.mark_as_unchecked
  10 + end
  11 +
  12 + merge_request
  13 + end
  14 + end
  15 +end
... ...
app/services/merge_requests/update_service.rb 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +module MergeRequests
  2 + class UpdateService < MergeRequests::BaseService
  3 + def execute(merge_request)
  4 + # We dont allow change of source/target projects
  5 + # after merge request was created
  6 + params.delete(:source_project_id)
  7 + params.delete(:target_project_id)
  8 +
  9 + state = params.delete('state_event')
  10 +
  11 + case state
  12 + when 'reopen'
  13 + MergeRequests::ReopenService.new(project, current_user, {}).execute(merge_request)
  14 + when 'close'
  15 + MergeRequests::CloseService.new(project, current_user, {}).execute(merge_request)
  16 + end
  17 +
  18 + if params.present? && merge_request.update_attributes(params)
  19 + merge_request.reset_events_cache
  20 +
  21 + if merge_request.previous_changes.include?('assignee_id')
  22 + notification_service.reassigned_merge_request(merge_request, current_user)
  23 + create_assignee_note(merge_request)
  24 + end
  25 +
  26 + merge_request.notice_added_references(merge_request.project, current_user)
  27 + execute_hooks(merge_request)
  28 + end
  29 +
  30 + merge_request
  31 + end
  32 + end
  33 +end
... ...