Extract detection of compression types
Separate out detecting compression types from uncompressing and staging.
This commit is contained in:
parent
837d206a62
commit
3ad19e08b7
@ -70,33 +70,23 @@ class CurlDownloadStrategy < AbstractDownloadStrategy
|
|||||||
end
|
end
|
||||||
|
|
||||||
def stage
|
def stage
|
||||||
if @tarball_path.extname == '.jar'
|
case @tarball_path.compression_type
|
||||||
magic_bytes = nil
|
when :zip
|
||||||
elsif @tarball_path.extname == '.pkg'
|
|
||||||
# Use more than 4 characters to not clash with magicbytes
|
|
||||||
magic_bytes = "____pkg"
|
|
||||||
else
|
|
||||||
# get the first six bytes
|
|
||||||
File.open(@tarball_path) { |f| magic_bytes = f.read(6) }
|
|
||||||
end
|
|
||||||
|
|
||||||
# magic numbers stolen from /usr/share/file/magic/
|
|
||||||
case magic_bytes
|
|
||||||
when /^PK\003\004/ # .zip archive
|
|
||||||
quiet_safe_system '/usr/bin/unzip', {:quiet_flag => '-qq'}, @tarball_path
|
quiet_safe_system '/usr/bin/unzip', {:quiet_flag => '-qq'}, @tarball_path
|
||||||
chdir
|
chdir
|
||||||
when /^\037\213/, /^BZh/, /^\037\235/ # gzip/bz2/compress compressed
|
when :gzip, :bzip2, :compress
|
||||||
|
# Assume these are also tarred
|
||||||
# TODO check if it's really a tar archive
|
# TODO check if it's really a tar archive
|
||||||
safe_system '/usr/bin/tar', 'xf', @tarball_path
|
safe_system '/usr/bin/tar', 'xf', @tarball_path
|
||||||
chdir
|
chdir
|
||||||
when /^\xFD7zXZ\x00/ # xz compressed
|
when :xz
|
||||||
raise "You must install XZutils: brew install xz" unless which_s "xz"
|
raise "You must install XZutils: brew install xz" unless which_s "xz"
|
||||||
safe_system "xz -dc \"#{@tarball_path}\" | /usr/bin/tar xf -"
|
safe_system "xz -dc \"#{@tarball_path}\" | /usr/bin/tar xf -"
|
||||||
chdir
|
chdir
|
||||||
when '____pkg'
|
when :pkg
|
||||||
safe_system '/usr/sbin/pkgutil', '--expand', @tarball_path, File.basename(@url)
|
safe_system '/usr/sbin/pkgutil', '--expand', @tarball_path, File.basename(@url)
|
||||||
chdir
|
chdir
|
||||||
when /Rar!/
|
when :rar
|
||||||
quiet_safe_system 'unrar', 'x', {:quiet_flag => '-inul'}, @tarball_path
|
quiet_safe_system 'unrar', 'x', {:quiet_flag => '-inul'}, @tarball_path
|
||||||
else
|
else
|
||||||
# we are assuming it is not an archive, use original filename
|
# we are assuming it is not an archive, use original filename
|
||||||
|
|||||||
@ -240,6 +240,31 @@ class Pathname
|
|||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def compression_type
|
||||||
|
# Don't treat jars as compressed
|
||||||
|
return nil if self.extname == '.jar'
|
||||||
|
|
||||||
|
# OS X installer package
|
||||||
|
return :pkg if self.extname == '.pkg'
|
||||||
|
|
||||||
|
# get the first six bytes
|
||||||
|
magic_bytes = nil
|
||||||
|
File.open(self) { |f| magic_bytes = f.read(6) }
|
||||||
|
|
||||||
|
# magic numbers stolen from /usr/share/file/magic/
|
||||||
|
case magic_bytes
|
||||||
|
when /^PK\003\004/ then :zip
|
||||||
|
when /^\037\213/ then :gzip
|
||||||
|
when /^BZh/ then :bzip2
|
||||||
|
when /^\037\235/ then :compress
|
||||||
|
when /^\xFD7zXZ\x00/ then :xz
|
||||||
|
when /^Rar!/ then :rar
|
||||||
|
else
|
||||||
|
# Assume it is not an archive
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def incremental_hash(hasher)
|
def incremental_hash(hasher)
|
||||||
incr_hash = hasher.new
|
incr_hash = hasher.new
|
||||||
self.open('r') do |f|
|
self.open('r') do |f|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user