diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-14 21:09:08 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-02-14 21:09:08 +0000 |
commit | 866ca4e49ff74ffadf8e6f6ff663a168489c2aba (patch) | |
tree | cc3135b1bae11dbd1cb3a30cb547473ad89a5551 /lib/gitlab/background_migration | |
parent | 26a50872e9da9509c52c70f74dc21698fec906db (diff) | |
download | gitlab-ce-866ca4e49ff74ffadf8e6f6ff663a168489c2aba.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/background_migration')
-rw-r--r-- | lib/gitlab/background_migration/link_lfs_objects.rb | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/gitlab/background_migration/link_lfs_objects.rb b/lib/gitlab/background_migration/link_lfs_objects.rb new file mode 100644 index 00000000000..014bebc4258 --- /dev/null +++ b/lib/gitlab/background_migration/link_lfs_objects.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Gitlab + module BackgroundMigration + # Create missing LfsObjectsProject records for forks + class LinkLfsObjects + # Model definition used for migration + class ForkNetworkMember < ActiveRecord::Base + self.table_name = 'fork_network_members' + + def self.with_non_existing_lfs_objects + joins('JOIN lfs_objects_projects lop ON fork_network_members.forked_from_project_id = lop.project_id') + .where( + <<~SQL + NOT EXISTS ( + SELECT 1 + FROM lfs_objects_projects + WHERE lfs_objects_projects.project_id = fork_network_members.project_id + AND lfs_objects_projects.lfs_object_id = lop.lfs_object_id + ) + SQL + ) + end + end + + def perform(start_id, end_id) + select_query = + ForkNetworkMember + .select('lop.lfs_object_id, fork_network_members.project_id') + .with_non_existing_lfs_objects + .where(project_id: start_id..end_id) + + return if select_query.empty? + + execute <<-SQL + INSERT INTO lfs_objects_projects (lfs_object_id, project_id) + #{select_query.to_sql} + SQL + end + + private + + def execute(sql) + ::ActiveRecord::Base.connection.execute(sql) + end + end + end +end |