diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /app/services/resource_events | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) | |
download | gitlab-ce-8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781.tar.gz |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'app/services/resource_events')
4 files changed, 60 insertions, 3 deletions
diff --git a/app/services/resource_events/change_labels_service.rb b/app/services/resource_events/change_labels_service.rb index e0d019f54be..dc23f727079 100644 --- a/app/services/resource_events/change_labels_service.rb +++ b/app/services/resource_events/change_labels_service.rb @@ -22,7 +22,7 @@ module ResourceEvents label_hash.merge(label_id: label.id, action: ResourceLabelEvent.actions['remove']) end - Gitlab::Database.bulk_insert(ResourceLabelEvent.table_name, labels) + Gitlab::Database.bulk_insert(ResourceLabelEvent.table_name, labels) # rubocop:disable Gitlab/BulkInsert resource.expire_note_etag_cache end diff --git a/app/services/resource_events/change_state_service.rb b/app/services/resource_events/change_state_service.rb new file mode 100644 index 00000000000..8beb76d8aee --- /dev/null +++ b/app/services/resource_events/change_state_service.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module ResourceEvents + class ChangeStateService + attr_reader :resource, :user + + def initialize(user:, resource:) + @user, @resource = user, resource + end + + def execute(state) + ResourceStateEvent.create( + user: user, + issue: issue, + merge_request: merge_request, + state: ResourceStateEvent.states[state], + created_at: Time.zone.now) + + resource.expire_note_etag_cache + end + + private + + def issue + return unless resource.is_a?(Issue) + + resource + end + + def merge_request + return unless resource.is_a?(MergeRequest) + + resource + end + end +end diff --git a/app/services/resource_events/merge_into_notes_service.rb b/app/services/resource_events/merge_into_notes_service.rb index 4aa9bb80229..122bcb8550f 100644 --- a/app/services/resource_events/merge_into_notes_service.rb +++ b/app/services/resource_events/merge_into_notes_service.rb @@ -11,7 +11,8 @@ module ResourceEvents SYNTHETIC_NOTE_BUILDER_SERVICES = [ SyntheticLabelNotesBuilderService, - SyntheticMilestoneNotesBuilderService + SyntheticMilestoneNotesBuilderService, + SyntheticStateNotesBuilderService ].freeze attr_reader :resource, :current_user, :params @@ -23,7 +24,7 @@ module ResourceEvents end def execute(notes = []) - (notes + synthetic_notes).sort_by { |n| n.created_at } + (notes + synthetic_notes).sort_by(&:created_at) end private diff --git a/app/services/resource_events/synthetic_state_notes_builder_service.rb b/app/services/resource_events/synthetic_state_notes_builder_service.rb new file mode 100644 index 00000000000..763134d98d8 --- /dev/null +++ b/app/services/resource_events/synthetic_state_notes_builder_service.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module ResourceEvents + class SyntheticStateNotesBuilderService < BaseSyntheticNotesBuilderService + private + + def synthetic_notes + state_change_events.map do |event| + StateNote.from_event(event, resource: resource, resource_parent: resource_parent) + end + end + + def state_change_events + return [] unless resource.respond_to?(:resource_state_events) + + events = resource.resource_state_events.includes(user: :status) # rubocop: disable CodeReuse/ActiveRecord + since_fetch_at(events) + end + end +end |