def unzip(parameters)
require 'zip/zip'
params_desc = {
:src => { :mandatory => true, :type => :string },
:dest => { :mandatory => false, :type => :string, :default => '.' }
}
check_parameters(parameters, params_desc)
src = parameters[:src]
dest = parameters[:dest]
error "unzip 'src' parameter must be an readable ZIP archive" unless
File.exists?(src) and File.readable?(src)
FileUtils.makedirs(dest) if not File.exists?(dest)
puts "Extracting ZIP file '#{src}' to '#{dest}'"
begin
Zip::ZipFile.foreach(src) do |entry|
puts "Writing '#{entry}'" if @build.listener.verbose
tofile = File.join(dest, entry.name)
if entry.file?
dir = File.dirname(tofile)
FileUtils.makedirs(dir) if not File.exists?(dir)
entry.extract(tofile)
elsif entry.directory?
FileUtils.makedirs(tofile)
end
end
rescue
error "Error extracting ZIP archive: #{$!}"
end
end