diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 58e5b197b58bae81ad8ffb591dc1ff9c04f6baa1..5d4afcddaeaec030156dfa4e35555a048c1fd359 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -49,12 +49,15 @@ class HttpDownloadStrategy <AbstractDownloadStrategy return @dl # thus performs checksum verification end def stage - case `file -b #{@dl}` - when /^Zip archive data/ + # magic numbers stolen from /usr/share/file/magic/ + File.open(@dl) do |f| + # get the first four bytes + case f.read(4) + when /^PK\003\004/ # .zip archive safe_system '/usr/bin/unzip', '-qq', @dl chdir - when /^(gzip|bzip2) compressed data/ - # TODO do file -z now to see if it is in fact a tar + when /^\037\213/, /^BZh/ # gzip/bz2 compressed + # TODO check if it's really a tar archive safe_system '/usr/bin/tar', 'xf', @dl chdir else @@ -64,6 +67,7 @@ class HttpDownloadStrategy <AbstractDownloadStrategy # HOWEVER if this breaks some expectation you had we *will* change the # behaviour, just open an issue at github FileUtils.mv @dl, File.basename(@url) + end end end private