diff options
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/download_strategy.rb | 24 | ||||
| -rw-r--r-- | Library/Homebrew/extend/pathname.rb | 25 |
2 files changed, 32 insertions, 17 deletions
diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index b8594f625..718643bf9 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -70,33 +70,23 @@ class CurlDownloadStrategy < AbstractDownloadStrategy end def stage - if @tarball_path.extname == '.jar' - magic_bytes = nil - 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 + case @tarball_path.compression_type + when :zip quiet_safe_system '/usr/bin/unzip', {:quiet_flag => '-qq'}, @tarball_path 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 safe_system '/usr/bin/tar', 'xf', @tarball_path chdir - when /^\xFD7zXZ\x00/ # xz compressed + when :xz raise "You must install XZutils: brew install xz" unless which_s "xz" safe_system "xz -dc \"#{@tarball_path}\" | /usr/bin/tar xf -" chdir - when '____pkg' + when :pkg safe_system '/usr/sbin/pkgutil', '--expand', @tarball_path, File.basename(@url) chdir - when /Rar!/ + when :rar quiet_safe_system 'unrar', 'x', {:quiet_flag => '-inul'}, @tarball_path else # we are assuming it is not an archive, use original filename diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 3dda828d5..515356861 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -240,6 +240,31 @@ class Pathname nil 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) incr_hash = hasher.new self.open('r') do |f| |
