2019-10-03 21:19:35 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "rubygems/package"
|
|
|
|
|
|
|
|
module Compression
|
|
|
|
class Tar < Strategy
|
|
|
|
def extension
|
|
|
|
".tar"
|
|
|
|
end
|
|
|
|
|
|
|
|
def compress(path, target_name)
|
|
|
|
tar_filename = sanitize_filename("#{target_name}.tar")
|
|
|
|
Discourse::Utils.execute_command(
|
|
|
|
"tar",
|
|
|
|
"--create",
|
|
|
|
"--file",
|
|
|
|
tar_filename,
|
|
|
|
target_name,
|
|
|
|
failure_message: "Failed to tar file.",
|
|
|
|
)
|
|
|
|
|
|
|
|
sanitize_path("#{path}/#{tar_filename}")
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def extract_folder(_entry, _entry_path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_compressed_file_stream(compressed_file_path)
|
|
|
|
file_stream = IO.new(IO.sysopen(compressed_file_path))
|
|
|
|
tar_extract = Gem::Package::TarReader.new(file_stream)
|
|
|
|
tar_extract.rewind
|
|
|
|
yield(tar_extract)
|
|
|
|
end
|
|
|
|
|
2022-09-30 02:00:38 +08:00
|
|
|
def build_entry_path(dest_path, entry, _)
|
|
|
|
File.join(dest_path, entry.full_name)
|
|
|
|
end
|
|
|
|
|
|
|
|
def decompression_results_path(dest_path, _)
|
|
|
|
dest_path
|
2019-10-03 21:19:35 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|