FEATURE: admin/user exports are compressed using the zip format (#7784)

* FEATURE: admin/user exports are compressed using the zip format

* Update translations. Theme exporter now exports .zip file. Theme importer supports .zip and .gz files

* Fix controller test, updated locale and skip saving the csv export to disk
This commit is contained in:
Roman Rizzi
2019-07-10 11:13:03 -03:00
committed by GitHub
parent f0fea5991f
commit 8b2580e20f
14 changed files with 89 additions and 30 deletions

View File

@@ -1,5 +1,7 @@
# frozen_string_literal: true
require 'zip'
module ThemeStore; end
class ThemeStore::TgzExporter
@@ -58,11 +60,19 @@ class ThemeStore::TgzExporter
private
def export_package
export_to_folder
Dir.chdir(@temp_folder) do
tar_filename = "#{@export_name}.tar"
Discourse::Utils.execute_command('tar', '--create', '--file', tar_filename, @export_name, failure_message: "Failed to tar theme.")
Discourse::Utils.execute_command('gzip', '-5', tar_filename, failure_message: "Failed to gzip archive.")
"#{@temp_folder}/#{tar_filename}.gz"
zip_filename = "#{tar_filename}.zip"
absolute_path = "#{@temp_folder}/#{tar_filename}"
Zip::File.open(zip_filename, Zip::File::CREATE) do |zipfile|
zipfile.add(tar_filename, absolute_path)
zipfile.close
end
"#{absolute_path}.zip"
end
end

View File

@@ -1,5 +1,7 @@
# frozen_string_literal: true
require 'zip'
module ThemeStore; end
class ThemeStore::TgzImporter
@@ -13,8 +15,21 @@ class ThemeStore::TgzImporter
def import!
FileUtils.mkdir(@temp_folder)
Dir.chdir(@temp_folder) do
Discourse::Utils.execute_command("tar", "-xzvf", @filename, "--strip", "1")
if @filename.include?('.zip')
name = @filename.split('/').last.gsub('.zip', '')
Dir.chdir(@temp_folder) do
Zip::File.open(@filename) do |zip_file|
zip_file.each { |entry| entry.extract(name) }
end
Discourse::Utils.execute_command("tar", "-xvf", name, "--strip", "1")
end
else
Dir.chdir(@temp_folder) do
Discourse::Utils.execute_command("tar", "-xzvf", @filename, "--strip", "1")
end
end
rescue RuntimeError
raise RemoteTheme::ImportError, I18n.t("themes.import_error.unpack_failed")