Commit ba87b76de1177574e26ad09ca97c30fde76d7a45

Authored by Dmitriy Zaporozhets
1 parent 6cc4ac7b

Use EventCreateService for notes, merge requests

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/observers/merge_request_observer.rb
... ... @@ -2,24 +2,21 @@ class MergeRequestObserver &lt; ActivityObserver
2 2 observe :merge_request
3 3  
4 4 def after_create(merge_request)
5   - if merge_request.author_id
6   - create_event(merge_request, Event.determine_action(merge_request))
7   - end
8   -
  5 + event_service.open_mr(merge_request, current_user)
9 6 notification.new_merge_request(merge_request, current_user)
10 7 merge_request.create_cross_references!(merge_request.project, current_user)
11 8 execute_hooks(merge_request)
12 9 end
13 10  
14 11 def after_close(merge_request, transition)
15   - create_event(merge_request, Event::CLOSED)
  12 + event_service.close_mr(merge_request, current_user)
16 13 notification.close_mr(merge_request, current_user)
17 14 create_note(merge_request)
18 15 execute_hooks(merge_request)
19 16 end
20 17  
21 18 def after_reopen(merge_request, transition)
22   - create_event(merge_request, Event::REOPENED)
  19 + event_service.reopen_mr(merge_request, current_user)
23 20 create_note(merge_request)
24 21 execute_hooks(merge_request)
25 22 merge_request.reload_code
... ... @@ -33,16 +30,6 @@ class MergeRequestObserver &lt; ActivityObserver
33 30 execute_hooks(merge_request)
34 31 end
35 32  
36   - def create_event(record, status)
37   - Event.create(
38   - project: record.target_project,
39   - target_id: record.id,
40   - target_type: record.class.name,
41   - action: status,
42   - author_id: current_user.id
43   - )
44   - end
45   -
46 33 private
47 34  
48 35 # Create merge request note with service comment like 'Status changed to closed'
... ...
app/observers/note_observer.rb
... ... @@ -2,6 +2,12 @@ class NoteObserver &lt; BaseObserver
2 2 def after_create(note)
3 3 notification.new_note(note)
4 4  
  5 + # Skip system notes, like status changes and cross-references.
  6 + # Skip wall notes to prevent spamming of dashboard
  7 + if note.noteable_type.present? && !note.system
  8 + event_service.leave_note(note, current_user)
  9 + end
  10 +
5 11 unless note.system?
6 12 # Create a cross-reference note if this Note contains GFM that names an
7 13 # issue, merge request, or commit.
... ...
app/services/event_create_service.rb
... ... @@ -42,6 +42,14 @@ class EventCreateService
42 42 create_event(milestone, current_user, Event::CLOSED)
43 43 end
44 44  
  45 + def reopen_milestone(milestone, current_user)
  46 + create_event(milestone, current_user, Event::REOPENED)
  47 + end
  48 +
  49 + def leave_note(note, current_user)
  50 + create_event(note, current_user, Event::COMMENTED)
  51 + end
  52 +
45 53 private
46 54  
47 55 def create_event(record, current_user, status)
... ...
app/services/merge_requests/base_merge_service.rb
... ... @@ -8,13 +8,7 @@ module MergeRequests
8 8 end
9 9  
10 10 def create_merge_event(merge_request, current_user)
11   - Event.create(
12   - project: merge_request.target_project,
13   - target_id: merge_request.id,
14   - target_type: merge_request.class.name,
15   - action: Event::MERGED,
16   - author_id: current_user.id
17   - )
  11 + EventCreateService.new.merge_mr(merge_request, current_user)
18 12 end
19 13  
20 14 def execute_project_hooks(merge_request)
... ...
config/application.rb
... ... @@ -19,7 +19,7 @@ module Gitlab
19 19 # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
20 20  
21 21 # Activate observers that should always be running.
22   - config.active_record.observers = :activity_observer,
  22 + config.active_record.observers = :milestone_observer,
23 23 :project_activity_cache_observer,
24 24 :issue_observer,
25 25 :key_observer,
... ...