67 lines
1.5 KiB
Ruby
67 lines
1.5 KiB
Ruby
module Ark
|
|
class SevenZipCommandBuilder
|
|
def unpack
|
|
sevenzip_command
|
|
end
|
|
|
|
def dump
|
|
sevenzip_command_builder(resource.path, 'e')
|
|
end
|
|
|
|
def cherry_pick
|
|
"#{sevenzip_command_builder(resource.path, 'e')} -r #{resource.creates}"
|
|
end
|
|
|
|
def initialize(resource)
|
|
@resource = resource
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :resource
|
|
|
|
# rubocop:disable Metrics/AbcSize
|
|
def sevenzip_command
|
|
if resource.strip_components <= 0
|
|
sevenzip_command_builder(resource.path, 'x')
|
|
return
|
|
end
|
|
|
|
tmpdir = make_temp_directory
|
|
cmd = sevenzip_command_builder(tmpdir, 'e')
|
|
|
|
cmd += " && "
|
|
currdir = tmpdir.tr('/', '\\')
|
|
|
|
1.upto(resource.strip_components).each do |count|
|
|
cmd += "for /f %#{count} in ('dir /ad /b \"#{currdir}\"') do "
|
|
currdir += "\\%#{count}"
|
|
end
|
|
|
|
cmd += "xcopy \"#{currdir}\" \"#{resource.home_dir}\" /s /e"
|
|
end
|
|
# rubocop:enable Metrics/AbcSize
|
|
|
|
def sevenzip_binary
|
|
resource.run_context.node['ark']['tar']
|
|
end
|
|
|
|
def sevenzip_command_builder(dir, command)
|
|
"#{sevenzip_binary} #{command} \"#{resource.release_file}\"#{extension_is_tar} -o\"#{dir}\" -uy"
|
|
end
|
|
|
|
def extension_is_tar
|
|
if resource.extension =~ /tar.gz|tgz|tar.bz2|tbz|tar.xz|txz/
|
|
" -so | #{sevenzip_binary} x -aoa -si -ttar"
|
|
else
|
|
""
|
|
end
|
|
end
|
|
|
|
def make_temp_directory
|
|
require 'tmpdir'
|
|
Dir.mktmpdir
|
|
end
|
|
end
|
|
end
|