diff options
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/download_strategy.rb | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 116d53b79..29212323e 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -138,36 +138,29 @@ class CurlDownloadStrategy < AbstractDownloadStrategy tarball_path end + # gunzip and bunzip2 write the output file in the same directory as the input + # file regardless of the current working directory, so we need to write it to + # the correct location ourselves. + def buffered_write(tool) + target = File.basename(basename_without_params, tarball_path.extname) + + IO.popen("#{tool} -f '#{tarball_path}' -c") do |pipe| + File.open(target, "wb") do |f| + buf = "" + f.write(buf) while pipe.read(1024, buf) + end + end + end + def stage case tarball_path.compression_type when :zip with_system_path { quiet_safe_system 'unzip', {:quiet_flag => '-qq'}, tarball_path } chdir when :gzip_only - # gunzip writes the compressed data in the location of the original, - # regardless of the current working directory; the only way to - # write elsewhere is to use the stdout - with_system_path do - target = File.basename(basename_without_params, ".gz") - - IO.popen("gunzip -f '#{tarball_path}' -c") do |pipe| - File.open(target, "wb") do |f| - buf = "" - f.write(buf) while pipe.read(1024, buf) - end - end - end + with_system_path { buffered_write("gunzip") } when :bzip2_only - with_system_path do - target = File.basename(basename_without_params, ".bz2") - - IO.popen("bunzip2 -f '#{tarball_path}' -c") do |pipe| - File.open(target, "wb") do |f| - buf = "" - f.write(buf) while pipe.read(1024, buf) - end - end - end + with_system_path { buffered_write("bunzip2") } when :gzip, :bzip2, :compress, :tar # Assume these are also tarred # TODO check if it's really a tar archive |
