Changes to Attachments Migration for EE and Geo compatibility
This commit is contained in:
parent
dc62441ffd
commit
58f32622ce
|
@ -3,7 +3,7 @@ module Projects
|
||||||
AttachmentMigrationError = Class.new(StandardError)
|
AttachmentMigrationError = Class.new(StandardError)
|
||||||
|
|
||||||
class MigrateAttachmentsService < BaseService
|
class MigrateAttachmentsService < BaseService
|
||||||
attr_reader :logger
|
attr_reader :logger, :old_path, :new_path
|
||||||
|
|
||||||
def initialize(project, logger = nil)
|
def initialize(project, logger = nil)
|
||||||
@project = project
|
@project = project
|
||||||
|
@ -11,16 +11,21 @@ module Projects
|
||||||
end
|
end
|
||||||
|
|
||||||
def execute
|
def execute
|
||||||
old_path = FileUploader.dynamic_path_segment(project)
|
@old_path = project.full_path
|
||||||
project.storage_version = ::Project::HASHED_STORAGE_FEATURES[:attachments]
|
@new_path = project.disk_path
|
||||||
new_path = FileUploader.dynamic_path_segment(project)
|
|
||||||
|
|
||||||
move_folder!(old_path, new_path)
|
origin = FileUploader.dynamic_path_segment(project)
|
||||||
|
project.storage_version = ::Project::HASHED_STORAGE_FEATURES[:attachments]
|
||||||
|
target = FileUploader.dynamic_path_segment(project)
|
||||||
|
|
||||||
|
result = move_folder!(origin, target)
|
||||||
project.save!
|
project.save!
|
||||||
|
|
||||||
if block_given?
|
if result && block_given?
|
||||||
yield
|
yield
|
||||||
end
|
end
|
||||||
|
|
||||||
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -41,6 +46,8 @@ module Projects
|
||||||
|
|
||||||
FileUtils.mv(old_path, new_path)
|
FileUtils.mv(old_path, new_path)
|
||||||
logger.info("Migrated project attachments from '#{old_path}' to '#{new_path}' (PROJECT_ID=#{project.id})")
|
logger.info("Migrated project attachments from '#{old_path}' to '#{new_path}' (PROJECT_ID=#{project.id})")
|
||||||
|
|
||||||
|
true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,12 +31,19 @@ class FileUploader < GitlabUploader
|
||||||
# Returns a String without a trailing slash
|
# Returns a String without a trailing slash
|
||||||
def self.dynamic_path_segment(project)
|
def self.dynamic_path_segment(project)
|
||||||
if project.hashed_storage?(:attachments)
|
if project.hashed_storage?(:attachments)
|
||||||
File.join(CarrierWave.root, base_dir, project.disk_path)
|
dynamic_path_builder(project.disk_path)
|
||||||
else
|
else
|
||||||
File.join(CarrierWave.root, base_dir, project.full_path)
|
dynamic_path_builder(project.full_path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Auxiliary method to build dynamic path segment when not using a project model
|
||||||
|
#
|
||||||
|
# Prefer to use the `.dynamic_path_segment` as it includes Hashed Storage specific logic
|
||||||
|
def self.dynamic_path_builder(path)
|
||||||
|
File.join(CarrierWave.root, base_dir, path)
|
||||||
|
end
|
||||||
|
|
||||||
attr_accessor :model
|
attr_accessor :model
|
||||||
attr_reader :secret
|
attr_reader :secret
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,6 @@ describe Projects::HashedStorage::MigrateAttachmentsService do
|
||||||
end
|
end
|
||||||
|
|
||||||
def base_path(storage)
|
def base_path(storage)
|
||||||
File.join(CarrierWave.root, FileUploader.base_dir, storage.disk_path)
|
FileUploader.dynamic_path_builder(storage.disk_path)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue