diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-19 21:09:10 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-19 21:09:10 +0300 |
commit | 33795139ea8e72756bee3675b4e16387425e6ab1 (patch) | |
tree | 3ca568fca61482e57810ee30ad5ce4b964a82c4e /app/services/issuable | |
parent | c7e385e282bcb8505589bce526e692b7bb819ffa (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services/issuable')
-rw-r--r-- | app/services/issuable/clone/attributes_rewriter.rb | 18 | ||||
-rw-r--r-- | app/services/issuable/common_system_notes_service.rb | 17 |
2 files changed, 33 insertions, 2 deletions
diff --git a/app/services/issuable/clone/attributes_rewriter.rb b/app/services/issuable/clone/attributes_rewriter.rb index 2b436f6322c..135ab011d69 100644 --- a/app/services/issuable/clone/attributes_rewriter.rb +++ b/app/services/issuable/clone/attributes_rewriter.rb @@ -19,6 +19,7 @@ module Issuable copy_resource_label_events copy_resource_weight_events + copy_resource_milestone_events end private @@ -65,6 +66,23 @@ module Issuable end end + def copy_resource_milestone_events + entity_key = new_entity.class.name.underscore.foreign_key + + copy_events(ResourceMilestoneEvent.table_name, original_entity.resource_milestone_events) do |event| + matching_destination_milestone = matching_milestone(event.milestone.title) + + if matching_destination_milestone.present? + event.attributes + .except('id', 'reference', 'reference_html') + .merge(entity_key => new_entity.id, + 'milestone_id' => matching_destination_milestone.id, + 'action' => ResourceMilestoneEvent.actions[event.action], + 'state' => ResourceMilestoneEvent.states[event.state]) + end + end + end + def copy_events(table_name, events_to_copy) events_to_copy.find_in_batches do |batch| events = batch.map do |event| diff --git a/app/services/issuable/common_system_notes_service.rb b/app/services/issuable/common_system_notes_service.rb index 846b881e819..c53e19c922a 100644 --- a/app/services/issuable/common_system_notes_service.rb +++ b/app/services/issuable/common_system_notes_service.rb @@ -22,13 +22,17 @@ module Issuable end create_due_date_note if issuable.previous_changes.include?('due_date') - create_milestone_note if issuable.previous_changes.include?('milestone_id') + create_milestone_note if has_milestone_changes? create_labels_note(old_labels) if old_labels && issuable.labels != old_labels end end private + def has_milestone_changes? + issuable.previous_changes.include?('milestone_id') + end + def handle_time_tracking_note if issuable.previous_changes.include?('time_estimate') create_time_estimate_note @@ -95,7 +99,16 @@ module Issuable end def create_milestone_note - SystemNoteService.change_milestone(issuable, issuable.project, current_user, issuable.milestone) + if milestone_changes_tracking_enabled? + # Creates a synthetic note + ResourceEvents::ChangeMilestoneService.new(resource: issuable, user: current_user).execute + else + SystemNoteService.change_milestone(issuable, issuable.project, current_user, issuable.milestone) + end + end + + def milestone_changes_tracking_enabled? + ::Feature.enabled?(:track_resource_milestone_change_events, issuable.project) end def create_due_date_note |