29 lines
1.1 KiB
Ruby
29 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
# rubocop:disable Style/Documentation
|
|
|
|
module Gitlab
|
|
module BackgroundMigration
|
|
class ReplaceBlockedByLinks
|
|
class IssueLink < ActiveRecord::Base
|
|
self.table_name = 'issue_links'
|
|
end
|
|
|
|
def perform(start_id, stop_id)
|
|
blocked_by_links = IssueLink.where(id: start_id..stop_id).where(link_type: 2)
|
|
|
|
ActiveRecord::Base.transaction do
|
|
# if there is duplicit bi-directional relation (issue2 is blocked by issue1
|
|
# and issue1 already links issue2), then we can just delete 'blocked by'.
|
|
# This should be rare as we have a pre-create check which checks if issues are
|
|
# already linked
|
|
blocked_by_links
|
|
.joins('INNER JOIN issue_links as opposite_links ON issue_links.source_id = opposite_links.target_id AND issue_links.target_id = opposite_links.source_id')
|
|
.where('opposite_links.link_type': 1)
|
|
.delete_all
|
|
|
|
blocked_by_links.update_all('source_id=target_id,target_id=source_id,link_type=1')
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|