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

replace_blocked_by_links.rb « background_migration « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 26626aaef797bc19d2211dd3ebda0acf6d83eaad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 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