diff options
Diffstat (limited to 'app/observers/merge_request_observer.rb')
-rw-r--r-- | app/observers/merge_request_observer.rb | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/app/observers/merge_request_observer.rb b/app/observers/merge_request_observer.rb index 03d4a22c1e6..6260b79593a 100644 --- a/app/observers/merge_request_observer.rb +++ b/app/observers/merge_request_observer.rb @@ -1,23 +1,56 @@ -class MergeRequestObserver < BaseObserver +class MergeRequestObserver < ActivityObserver + observe :merge_request + cattr_accessor :current_user + def after_create(merge_request) + event_author_id = merge_request.author_id + if event_author_id + create_event(merge_request, Event.determine_action(merge_request)) + end + notification.new_merge_request(merge_request, current_user) end def after_close(merge_request, transition) - Note.create_status_change_note(merge_request, current_user, merge_request.state) + create_event(merge_request, Event::CLOSED) + Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state) notification.close_mr(merge_request, current_user) end def after_merge(merge_request, transition) notification.merge_mr(merge_request) + # Since MR can be merged via sidekiq + # to prevent event duplication do this check + return true if merge_request.merge_event + + Event.create( + project: merge_request.target_project, + target_id: merge_request.id, + target_type: merge_request.class.name, + action: Event::MERGED, + author_id: merge_request.author_id_of_changes + ) end def after_reopen(merge_request, transition) - Note.create_status_change_note(merge_request, current_user, merge_request.state) + create_event(merge_request, Event::REOPENED) + Note.create_status_change_note(merge_request, merge_request.target_project, current_user, merge_request.state) end def after_update(merge_request) notification.reassigned_merge_request(merge_request, current_user) if merge_request.is_being_reassigned? end + + + def create_event(record, status) + Event.create( + project: record.target_project, + target_id: record.id, + target_type: record.class.name, + action: status, + author_id: record.author_id + ) + end + end |