From e43f522ab4c033ae0d8e44ab1bb33af8dbf22d0d Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Sun, 6 Apr 2014 11:29:59 -0500 Subject: Extract common decompression code to a method --- Library/Homebrew/download_strategy.rb | 39 ++++++++++++++--------------------- 1 file changed, 16 insertions(+), 23 deletions(-) (limited to 'Library/Homebrew/download_strategy.rb') 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 -- cgit v1.2.3