Commit
3c867dfa8efec28155158e3b2b7dbb21ba3ce0a1
MergeRequest services for create, update, close and reopen
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
| @@ -0,0 +1,16 @@ |
| @@ -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 @@ |
| @@ -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 @@ |
| @@ -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 @@ |
| @@ -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 @@ |
| @@ -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 |