summaryrefslogtreecommitdiff
path: root/app/services
diff options
context:
space:
mode:
authorFelipe Artur <felipefac@gmail.com>2017-11-20 12:44:10 -0200
committerFelipe Artur <felipefac@gmail.com>2017-11-21 11:09:14 -0200
commit3f6e45ed28408429295fba30df8f53a6672f3bbe (patch)
treead8c9c5210017f1dc26e71ecaf8791a2dbc9b50a /app/services
parent16299d5724d7695c6ed27da6ac5321a34737a7cd (diff)
downloadgitlab-ce-3f6e45ed28408429295fba30df8f53a6672f3bbe.tar.gz
Fix promoting milestone updating all issuables without milestoneissue_40337
Diffstat (limited to 'app/services')
-rw-r--r--app/services/milestones/promote_service.rb23
1 files changed, 14 insertions, 9 deletions
diff --git a/app/services/milestones/promote_service.rb b/app/services/milestones/promote_service.rb
index bd9cfd4e0ea..2187f26d1ed 100644
--- a/app/services/milestones/promote_service.rb
+++ b/app/services/milestones/promote_service.rb
@@ -6,14 +6,14 @@ module Milestones
check_project_milestone!(milestone)
Milestone.transaction do
- # Destroy all milestones with same title across projects
- destroy_old_milestones(milestone)
-
group_milestone = clone_project_milestone(milestone)
move_children_to_group_milestone(group_milestone)
- # Just to be safe
+ # Destroy all milestones with same title across projects
+ destroy_old_milestones(milestone)
+
+ # Rollback if milestone is not valid
unless group_milestone.valid?
raise_error(group_milestone.errors.full_messages.to_sentence)
end
@@ -35,7 +35,7 @@ module Milestones
end
def move_children_to_group_milestone(group_milestone)
- milestone_ids_for_merge(group_milestone).in_groups_of(100) do |milestone_ids|
+ milestone_ids_for_merge(group_milestone).in_groups_of(100, false) do |milestone_ids|
update_children(group_milestone, milestone_ids)
end
end
@@ -49,7 +49,12 @@ module Milestones
create_service = CreateService.new(group, current_user, params)
- create_service.execute
+ milestone = create_service.execute
+
+ # milestone won't be valid here because of duplicated title
+ milestone.save(validate: false)
+
+ milestone
end
def update_children(group_milestone, milestone_ids)
@@ -65,12 +70,12 @@ module Milestones
@group ||= parent.group || raise_error('Project does not belong to a group.')
end
- def destroy_old_milestones(group_milestone)
- Milestone.where(id: milestone_ids_for_merge(group_milestone)).destroy_all
+ def destroy_old_milestones(milestone)
+ Milestone.where(id: milestone_ids_for_merge(milestone)).destroy_all
end
def group_project_ids
- @group_project_ids ||= group.projects.map(&:id)
+ @group_project_ids ||= group.projects.pluck(:id)
end
def raise_error(message)