summaryrefslogtreecommitdiff
path: root/lib/gitlab/background_migration
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 21:09:08 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-02-14 21:09:08 +0000
commit866ca4e49ff74ffadf8e6f6ff663a168489c2aba (patch)
treecc3135b1bae11dbd1cb3a30cb547473ad89a5551 /lib/gitlab/background_migration
parent26a50872e9da9509c52c70f74dc21698fec906db (diff)
downloadgitlab-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.rb48
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