Commit 3c867dfa8efec28155158e3b2b7dbb21ba3ce0a1
1 parent
65cd9829
Exists in
spb-stable
and in
3 other branches
MergeRequest services for create, update, close and reopen
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
5 changed files
with
100 additions
and
0 deletions
Show diff stats
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 | ... | ... |
| ... | ... | @@ -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 | ... | ... |