Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-07-20 18:40:28 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-07-20 18:40:28 +0300
commitb595cb0c1dec83de5bdee18284abe86614bed33b (patch)
tree8c3d4540f193c5ff98019352f554e921b3a41a72 /app/services/issuable
parent2f9104a328fc8a4bddeaa4627b595166d24671d0 (diff)
Add latest changes from gitlab-org/gitlab@15-2-stable-eev15.2.0-rc42
Diffstat (limited to 'app/services/issuable')
-rw-r--r--app/services/issuable/clone/attributes_rewriter.rb126
-rw-r--r--app/services/issuable/clone/base_service.rb40
-rw-r--r--app/services/issuable/import_csv/base_service.rb3
3 files changed, 24 insertions, 145 deletions
diff --git a/app/services/issuable/clone/attributes_rewriter.rb b/app/services/issuable/clone/attributes_rewriter.rb
deleted file mode 100644
index 279d3051848..00000000000
--- a/app/services/issuable/clone/attributes_rewriter.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-# frozen_string_literal: true
-
-module Issuable
- module Clone
- class AttributesRewriter < ::Issuable::Clone::BaseService
- def initialize(current_user, original_entity, new_entity)
- @current_user = current_user
- @original_entity = original_entity
- @new_entity = new_entity
- end
-
- def execute
- update_attributes = { labels: cloneable_labels }
-
- milestone = matching_milestone(original_entity.milestone&.title)
- update_attributes[:milestone] = milestone if milestone.present?
-
- new_entity.update(update_attributes)
-
- copy_resource_label_events
- copy_resource_milestone_events
- copy_resource_state_events
- end
-
- private
-
- def matching_milestone(title)
- return if title.blank? || !new_entity.supports_milestone?
-
- params = { title: title, project_ids: new_entity.project&.id, group_ids: group&.id }
-
- milestones = MilestonesFinder.new(params).execute
- milestones.first
- end
-
- def cloneable_labels
- params = {
- project_id: new_entity.project&.id,
- group_id: group&.id,
- title: original_entity.labels.select(:title),
- include_ancestor_groups: true
- }
-
- params[:only_group_labels] = true if new_parent.is_a?(Group)
-
- LabelsFinder.new(current_user, params).execute
- end
-
- def copy_resource_label_events
- copy_events(ResourceLabelEvent.table_name, original_entity.resource_label_events) do |event|
- event.attributes
- .except('id', 'reference', 'reference_html')
- .merge(entity_key => new_entity.id, 'action' => ResourceLabelEvent.actions[event.action])
- end
- end
-
- def copy_resource_milestone_events
- return unless milestone_events_supported?
-
- copy_events(ResourceMilestoneEvent.table_name, original_entity.resource_milestone_events) do |event|
- if event.remove?
- event_attributes_with_milestone(event, nil)
- else
- matching_destination_milestone = matching_milestone(event.milestone_title)
-
- event_attributes_with_milestone(event, matching_destination_milestone) if matching_destination_milestone.present?
- end
- end
- end
-
- def copy_resource_state_events
- return unless state_events_supported?
-
- copy_events(ResourceStateEvent.table_name, original_entity.resource_state_events) do |event|
- event.attributes
- .except(*blocked_state_event_attributes)
- .merge(entity_key => new_entity.id,
- 'state' => ResourceStateEvent.states[event.state])
- end
- end
-
- # Overriden on EE::Issuable::Clone::AttributesRewriter
- def blocked_state_event_attributes
- ['id']
- end
-
- def event_attributes_with_milestone(event, milestone)
- event.attributes
- .except('id')
- .merge(entity_key => new_entity.id,
- 'milestone_id' => milestone&.id,
- 'action' => ResourceMilestoneEvent.actions[event.action],
- 'state' => ResourceMilestoneEvent.states[event.state])
- end
-
- def copy_events(table_name, events_to_copy)
- events_to_copy.find_in_batches do |batch|
- events = batch.map do |event|
- yield(event)
- end.compact
-
- ApplicationRecord.legacy_bulk_insert(table_name, events) # rubocop:disable Gitlab/BulkInsert
- end
- end
-
- def entity_key
- new_entity.class.name.underscore.foreign_key
- end
-
- def milestone_events_supported?
- both_respond_to?(:resource_milestone_events)
- end
-
- def state_events_supported?
- both_respond_to?(:resource_state_events)
- end
-
- def both_respond_to?(method)
- original_entity.respond_to?(method) &&
- new_entity.respond_to?(method)
- end
- end
- end
-end
-
-Issuable::Clone::AttributesRewriter.prepend_mod_with('Issuable::Clone::AttributesRewriter')
diff --git a/app/services/issuable/clone/base_service.rb b/app/services/issuable/clone/base_service.rb
index ce9918a4b56..98c50347719 100644
--- a/app/services/issuable/clone/base_service.rb
+++ b/app/services/issuable/clone/base_service.rb
@@ -3,13 +3,13 @@
module Issuable
module Clone
class BaseService < IssuableBaseService
- attr_reader :original_entity, :new_entity, :target_project
+ attr_reader :original_entity, :new_entity
alias_method :old_project, :project
- def execute(original_entity, target_project = nil)
+ def execute(original_entity, target_parent)
@original_entity = original_entity
- @target_project = target_project
+ @target_parent = target_parent
# Using transaction because of a high resources footprint
# on rewriting notes (unfolding references)
@@ -25,19 +25,21 @@ module Issuable
private
- def copy_award_emoji
- AwardEmojis::CopyService.new(original_entity, new_entity).execute
- end
+ attr_reader :target_parent
- def copy_notes
- Notes::CopyService.new(current_user, original_entity, new_entity).execute
+ def rewritten_old_entity_attributes(include_milestone: true)
+ Gitlab::Issuable::Clone::AttributesRewriter.new(
+ current_user,
+ original_entity,
+ target_parent
+ ).execute(include_milestone: include_milestone)
end
def update_new_entity
update_new_entity_description
- update_new_entity_attributes
copy_award_emoji
copy_notes
+ copy_resource_events
end
def update_new_entity_description
@@ -52,8 +54,16 @@ module Issuable
new_entity.update!(update_description_params)
end
- def update_new_entity_attributes
- AttributesRewriter.new(current_user, original_entity, new_entity).execute
+ def copy_award_emoji
+ AwardEmojis::CopyService.new(original_entity, new_entity).execute
+ end
+
+ def copy_notes
+ Notes::CopyService.new(current_user, original_entity, new_entity).execute
+ end
+
+ def copy_resource_events
+ Gitlab::Issuable::Clone::CopyResourceEventsService.new(current_user, original_entity, new_entity).execute
end
def update_old_entity
@@ -74,14 +84,8 @@ module Issuable
new_entity.resource_parent
end
- def group
- if new_entity.project&.group && current_user.can?(:read_group, new_entity.project.group)
- new_entity.project.group
- end
- end
-
def relative_position
- return if original_entity.project.root_ancestor.id != target_project.root_ancestor.id
+ return if original_entity.project.root_ancestor.id != target_parent.root_ancestor.id
original_entity.relative_position
end
diff --git a/app/services/issuable/import_csv/base_service.rb b/app/services/issuable/import_csv/base_service.rb
index 4a2078a4e60..9b41c88159f 100644
--- a/app/services/issuable/import_csv/base_service.rb
+++ b/app/services/issuable/import_csv/base_service.rb
@@ -23,7 +23,8 @@ module Issuable
with_csv_lines.each do |row, line_no|
issuable_attributes = {
title: row[:title],
- description: row[:description]
+ description: row[:description],
+ due_date: row[:due_date]
}
if create_issuable(issuable_attributes).persisted?