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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/backup/repositories.rb')
-rw-r--r--lib/backup/repositories.rb138
1 files changed, 0 insertions, 138 deletions
diff --git a/lib/backup/repositories.rb b/lib/backup/repositories.rb
deleted file mode 100644
index 6d8d5272bfa..00000000000
--- a/lib/backup/repositories.rb
+++ /dev/null
@@ -1,138 +0,0 @@
-# frozen_string_literal: true
-
-require 'yaml'
-
-module Backup
- # Backup and restores repositories by querying the database
- class Repositories < Task
- extend ::Gitlab::Utils::Override
-
- # @param [IO] progress IO interface to output progress
- # @param [Object] :strategy Fetches backups from gitaly
- # @param [Array<String>] :storages Filter by specified storage names. Empty means all storages.
- # @param [Array<String>] :paths Filter by specified project paths. Empty means all projects, groups, and snippets.
- # @param [Array<String>] :skip_paths Skip specified project paths. Empty means all projects, groups, and snippets.
- def initialize(progress, strategy:, options:, storages: [], paths: [], skip_paths: [])
- super(progress, options: options)
-
- @strategy = strategy
- @storages = storages
- @paths = paths
- @skip_paths = skip_paths
- end
-
- override :dump
- def dump(destination_path, backup_id)
- strategy.start(:create, destination_path, backup_id: backup_id)
- enqueue_consecutive
-
- ensure
- strategy.finish!
- end
-
- override :restore
- def restore(destination_path, backup_id)
- strategy.start(:restore, destination_path, remove_all_repositories: remove_all_repositories, backup_id: backup_id)
- enqueue_consecutive
-
- ensure
- strategy.finish!
-
- restore_object_pools
- end
-
- private
-
- attr_reader :strategy, :storages, :paths, :skip_paths
-
- def remove_all_repositories
- return if paths.present?
-
- storages.presence || Gitlab.config.repositories.storages.keys
- end
-
- def enqueue_consecutive
- enqueue_consecutive_projects
- enqueue_consecutive_snippets
- end
-
- def enqueue_consecutive_projects
- project_relation.find_each(batch_size: 1000) do |project|
- enqueue_project(project)
- end
- end
-
- def enqueue_consecutive_snippets
- snippet_relation.find_each(batch_size: 1000) { |snippet| enqueue_snippet(snippet) }
- end
-
- def enqueue_project(project)
- strategy.enqueue(project, Gitlab::GlRepository::PROJECT)
- strategy.enqueue(project, Gitlab::GlRepository::WIKI)
-
- return unless project.design_management_repository
-
- strategy.enqueue(project.design_management_repository, Gitlab::GlRepository::DESIGN)
- end
-
- def enqueue_snippet(snippet)
- strategy.enqueue(snippet, Gitlab::GlRepository::SNIPPET)
- end
-
- def project_relation
- scope = Project.includes(:route, :group, :namespace)
- scope = scope.id_in(ProjectRepository.for_repository_storage(storages).select(:project_id)) if storages.any?
- if paths.any?
- scope = scope.where_full_path_in(paths).or(
- Project.where(namespace_id: Namespace.where_full_path_in(paths).self_and_descendants)
- )
- end
-
- scope = scope.and(skipped_path_relation) if skip_paths.any?
- scope
- end
-
- def snippet_relation
- scope = Snippet.all
- scope = scope.id_in(SnippetRepository.for_repository_storage(storages).select(:snippet_id)) if storages.any?
- if paths.any?
- scope = scope.joins(:project).merge(
- Project.where_full_path_in(paths).or(
- Project.where(namespace_id: Namespace.where_full_path_in(paths).self_and_descendants)
- )
- )
- end
-
- if skip_paths.any?
- scope = scope.where(project: skipped_path_relation)
- scope = scope.or(Snippet.where(project: nil)) if !paths.any? && !storages.any?
- end
-
- scope
- end
-
- def skipped_path_relation
- Project.where.not(id: Project.where_full_path_in(skip_paths).or(
- Project.where(namespace_id: Namespace.where_full_path_in(skip_paths).self_and_descendants)
- ))
- end
-
- def restore_object_pools
- PoolRepository.includes(:source_project).find_each do |pool|
- progress.puts " - Object pool #{pool.disk_path}..."
-
- unless pool.source_project
- progress.puts " - Object pool #{pool.disk_path}... " + "[SKIPPED]".color(:cyan)
- next
- end
-
- pool.state = 'none'
- pool.save
-
- pool.schedule
- end
- end
- end
-end
-
-Backup::Repositories.prepend_mod_with('Backup::Repositories')