mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Split max decompressed setting for themes and backups (#8179)
This commit is contained in:
@@ -92,6 +92,9 @@ module BackupRestore
|
||||
extract_uploads
|
||||
|
||||
after_restore_hook
|
||||
rescue Compression::Strategy::ExtractFailed
|
||||
log "The uncompressed file is too big. Consider increasing the decompressed_theme_max_file_size_mb hidden setting."
|
||||
rollback
|
||||
rescue SystemExit
|
||||
log "Restore process was cancelled!"
|
||||
rollback
|
||||
@@ -138,7 +141,7 @@ module BackupRestore
|
||||
|
||||
pipeline = Compression::Pipeline.new([Compression::Tar.new, Compression::Gzip.new])
|
||||
|
||||
unzipped_path = pipeline.decompress(@tmp_directory, @archive_filename)
|
||||
unzipped_path = pipeline.decompress(@tmp_directory, @archive_filename, available_size)
|
||||
pipeline.strip_directory(unzipped_path, @tmp_directory)
|
||||
end
|
||||
|
||||
@@ -170,11 +173,15 @@ module BackupRestore
|
||||
|
||||
log "Extracting dump file..."
|
||||
|
||||
Compression::Gzip.new.decompress(@tmp_directory, @dump_filename)
|
||||
Compression::Gzip.new.decompress(@tmp_directory, @dump_filename, available_size)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def available_size
|
||||
SiteSetting.decompressed_backup_max_file_size_mb
|
||||
end
|
||||
|
||||
def ensure_restore_is_enabled
|
||||
raise BackupRestore::RestoreDisabledError unless Rails.env.development? || SiteSetting.allow_restore?
|
||||
end
|
||||
|
||||
@@ -20,10 +20,10 @@ module Compression
|
||||
end
|
||||
end
|
||||
|
||||
def decompress(dest_path, compressed_file_path, allow_non_root_folder: false)
|
||||
def decompress(dest_path, compressed_file_path, max_size, allow_non_root_folder: false)
|
||||
@strategies.reverse.reduce(compressed_file_path) do |to_decompress, strategy|
|
||||
last_extension = strategy.extension
|
||||
strategy.decompress(dest_path, to_decompress, allow_non_root_folder: allow_non_root_folder)
|
||||
strategy.decompress(dest_path, to_decompress, max_size, allow_non_root_folder: allow_non_root_folder)
|
||||
to_decompress.gsub(last_extension, '')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,11 +9,11 @@ module Compression
|
||||
file_name.include?(extension)
|
||||
end
|
||||
|
||||
def decompress(dest_path, compressed_file_path, allow_non_root_folder: false)
|
||||
def decompress(dest_path, compressed_file_path, max_size, allow_non_root_folder: false)
|
||||
sanitized_compressed_file_path = sanitize_path(compressed_file_path)
|
||||
|
||||
get_compressed_file_stream(sanitized_compressed_file_path) do |compressed_file|
|
||||
available_size = calculate_available_size
|
||||
available_size = calculate_available_size(max_size)
|
||||
|
||||
entries_of(compressed_file).each do |entry|
|
||||
entry_path = build_entry_path(
|
||||
@@ -59,8 +59,8 @@ module Compression
|
||||
end
|
||||
end
|
||||
|
||||
def calculate_available_size
|
||||
1024**2 * (SiteSetting.decompressed_file_max_size_mb / 1.049) # Mb to Mib
|
||||
def calculate_available_size(max_size)
|
||||
1024**2 * (max_size / 1.049) # Mb to Mib
|
||||
end
|
||||
|
||||
def entries_of(compressed_file)
|
||||
|
||||
@@ -18,8 +18,9 @@ class ThemeStore::ZipImporter
|
||||
FileUtils.mkdir(@temp_folder)
|
||||
|
||||
Dir.chdir(@temp_folder) do
|
||||
available_size = SiteSetting.decompressed_theme_max_file_size_mb
|
||||
Compression::Engine.engine_for(@original_filename).tap do |engine|
|
||||
engine.decompress(@temp_folder, @filename)
|
||||
engine.decompress(@temp_folder, @filename, available_size)
|
||||
engine.strip_directory(@temp_folder, @temp_folder, relative: true)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user