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/tasks/gitlab/import_export/export.rake')
-rw-r--r--lib/tasks/gitlab/import_export/export.rake105
1 files changed, 29 insertions, 76 deletions
diff --git a/lib/tasks/gitlab/import_export/export.rake b/lib/tasks/gitlab/import_export/export.rake
index 6cedf4e8cf1..ae54636fdd3 100644
--- a/lib/tasks/gitlab/import_export/export.rake
+++ b/lib/tasks/gitlab/import_export/export.rake
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require 'gitlab/with_request_store'
-
# Export project to archive
#
# @example
@@ -14,81 +12,36 @@ namespace :gitlab do
# Load it here to avoid polluting Rake tasks with Sidekiq test warnings
require 'sidekiq/testing'
- warn_user_is_not_gitlab
-
- if ENV['IMPORT_DEBUG'].present?
- ActiveRecord::Base.logger = Logger.new(STDOUT)
- Gitlab::Metrics::Exporter::SidekiqExporter.instance.start
- end
-
- GitlabProjectExport.new(
- namespace_path: args.namespace_path,
- project_path: args.project_path,
- username: args.username,
- file_path: args.archive_path,
- measurement_enabled: Gitlab::Utils.to_boolean(args.measurement_enabled)
- ).export
- end
- end
-end
-
-class GitlabProjectExport
- include Gitlab::WithRequestStore
-
- def initialize(opts)
- @project_path = opts.fetch(:project_path)
- @file_path = opts.fetch(:file_path)
- @current_user = User.find_by_username(opts.fetch(:username))
- namespace = Namespace.find_by_full_path(opts.fetch(:namespace_path))
- @project = namespace.projects.find_by_path(@project_path)
- @measurement_enabled = opts.fetch(:measurement_enabled)
- @measurable = Gitlab::Utils::Measuring.new if @measurement_enabled
- end
-
- def export
- validate_project
- validate_file_path
-
- with_export do
- ::Projects::ImportExport::ExportService.new(project, current_user)
- .execute(Gitlab::ImportExport::AfterExportStrategies::MoveFileStrategy.new(archive_path: file_path))
- end
-
- puts 'Done!'
- rescue StandardError => e
- puts "Exception: #{e.message}"
- puts e.backtrace
- exit 1
- end
-
- private
-
- attr_reader :measurable, :project, :current_user, :file_path, :project_path
-
- def validate_project
- unless project
- puts "Error: Project with path: #{project_path} was not found. Please provide correct project path"
- exit 1
- end
- end
-
- def validate_file_path
- directory = File.dirname(file_path)
- unless Dir.exist?(directory)
- puts "Error: Invalid file path: #{file_path}. Please provide correct file path"
- exit 1
- end
- end
-
- def with_export
- with_request_store do
- ::Gitlab::GitalyClient.allow_n_plus_1_calls do
- measurement_enabled? ? measurable.with_measuring { yield } : yield
+ logger = Logger.new($stdout)
+
+ begin
+ warn_user_is_not_gitlab
+
+ if ENV['EXPORT_DEBUG'].present?
+ ActiveRecord::Base.logger = logger
+ Gitlab::Metrics::Exporter::SidekiqExporter.instance.start
+ logger.level = Logger::DEBUG
+ else
+ logger.level = Logger::INFO
+ end
+
+ task = Gitlab::ImportExport::Project::ExportTask.new(
+ namespace_path: args.namespace_path,
+ project_path: args.project_path,
+ username: args.username,
+ file_path: args.archive_path,
+ measurement_enabled: Gitlab::Utils.to_boolean(args.measurement_enabled),
+ logger: logger
+ )
+
+ success = task.export
+
+ exit(success)
+ rescue StandardError => e
+ logger.error "Exception: #{e.message}"
+ logger.debug e.backtrace
+ exit 1
end
end
end
-
- def measurement_enabled?
- @measurement_enabled
- end
end