summaryrefslogtreecommitdiff
path: root/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb')
-rw-r--r--lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb54
1 files changed, 37 insertions, 17 deletions
diff --git a/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb b/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
index c5fb39b7b52..b30258123d4 100644
--- a/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
+++ b/lib/gitlab/import_export/after_export_strategies/base_after_export_strategy.rb
@@ -10,11 +10,9 @@ module Gitlab
StrategyError = Class.new(StandardError)
- AFTER_EXPORT_LOCK_FILE_NAME = '.after_export_action'
-
private
- attr_reader :project, :current_user
+ attr_reader :project, :current_user, :lock_file
public
@@ -29,8 +27,9 @@ module Gitlab
def execute(current_user, project)
@project = project
- return unless @project.export_status == :finished
-
+ ensure_export_ready!
+ ensure_lock_files_path!
+ @lock_file = File.join(lock_files_path, SecureRandom.hex)
@current_user = current_user
if invalid?
@@ -48,19 +47,32 @@ module Gitlab
false
ensure
delete_after_export_lock
+ delete_export_file
+ delete_archive_path
end
def to_json(options = {})
@options.to_h.merge!(klass: self.class.name).to_json
end
- def self.lock_file_path(project)
- return unless project.export_path || export_file_exists?
+ def ensure_export_ready!
+ raise StrategyError unless project.export_file_exists?
+ end
+
+ def ensure_lock_files_path!
+ FileUtils.mkdir_p(lock_files_path) unless Dir.exist?(lock_files_path)
+ end
+
+ def lock_files_path
+ project.import_export_shared.lock_files_path
+ end
- lock_path = project.import_export_shared.archive_path
+ def archive_path
+ project.import_export_shared.archive_path
+ end
- mkdir_p(lock_path)
- File.join(lock_path, AFTER_EXPORT_LOCK_FILE_NAME)
+ def locks_present?
+ project.import_export_shared.locks_present?
end
protected
@@ -69,25 +81,33 @@ module Gitlab
raise NotImplementedError
end
+ def delete_export?
+ true
+ end
+
private
+ def delete_export_file
+ return if locks_present? || !delete_export?
+
+ project.remove_exports
+ end
+
+ def delete_archive_path
+ FileUtils.rm_rf(archive_path) if File.directory?(archive_path)
+ end
+
def create_or_update_after_export_lock
- FileUtils.touch(self.class.lock_file_path(project))
+ FileUtils.touch(lock_file)
end
def delete_after_export_lock
- lock_file = self.class.lock_file_path(project)
-
FileUtils.rm(lock_file) if lock_file.present? && File.exist?(lock_file)
end
def log_validation_errors
errors.full_messages.each { |msg| project.import_export_shared.add_error_message(msg) }
end
-
- def export_file_exists?
- project.export_file_exists?
- end
end
end
end